Android 封装handler,android封装工作线程跟Handler工具类
直接上代码,不解说 - -
基于MVP封装P的基类
AbsHandlerThreadHelper.java
import java.lang.ref.WeakReference;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
public abstract class AbsHandlerThreadHelper {
protected ExecutorService mExecutorService;
private WeakReference mContextWeakReference;
protected HandlerInner mHandler;
protected static class HandlerInner extends Handler {
private WeakReference> mWeakReference;
public HandlerInner(AbsHandlerThreadHelper handlerThreadHelper) {
super();
this.mWeakReference = new WeakReference>(handlerThreadHelper);
}
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
AbsHandlerThreadHelper handlerThreadHelper = mWeakReference.get();
if (handlerThreadHelper != null) {
handlerThreadHelper.dispatchMessage(msg);
}
}
}
public AbsHandlerThreadHelper(T t) {
super();
this.mContextWeakReference = new WeakReference(t);
init();
}
private void init() {
mExecutorService = Executors.newCachedThreadPool();
mHandler = new HandlerInner(this);
}
public T getContext() {
return mContextWeakReference.get();
}
public abstract void dispatchMessage(Message msg);
public void onPreDestroy() {
onDestroy();
if (mExecutorService != null) {
mExecutorService.shutdown();
}
mExecutorService = null;
if (mHandler != null) {
mHandler.removeCallbacksAndMessages(null);
}
mHandler = null;
if (mContextWeakReference != null) {
mContextWeakReference.clear();
}
mContextWeakReference = null;
}
public abstract void onDestroy();
}
线程的基类
AbsThread.java
import java.lang.ref.WeakReference;
import android.content.Context;
public abstract class AbsThread implements Runnable {
protected WeakReference> mReference;
public AbsThread(AbsHandlerThreadHelper handlerThreadHelper) {
super();
this.mReference = new WeakReference>(handlerThreadHelper);
}
@Override
public void run() {
synchronized (this) {
AbsHandlerThreadHelper handlerThreadHelper = mReference.get();
if (handlerThreadHelper != null) {
runPro();
}
}
}
public abstract void runPro();
}
我用的是okhttp3的,所以封装多一个AbsOkHttpThread.java
import java.io.IOException;
import android.content.Context;
import android.os.Message;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
public abstract class AbsOkHttpThread extends AbsThread implements Callback {
private int success = 0;
private int fail = -1;
public AbsOkHttpThread(AbsHandlerThreadHelper handlerThreadHelper) {
super(handlerThreadHelper);
}
public AbsOkHttpThread(AbsHandlerThreadHelper handlerThreadHelper, int success, int fail) {
super(handlerThreadHelper);
this.success = success;
this.fail = fail;
}
@Override
public void onFailure(Call call, IOException exception) {
AbsHandlerThreadHelper handlerThreadHelper = mReference.get();
if (handlerThreadHelper != null) {
handlerThreadHelper.mHandler.sendEmptyMessage(fail);
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
AbsHandlerThreadHelper handlerThreadHelper = mReference.get();
if (handlerThreadHelper != null) {
Message msg = new Message();
//TODO call
final String result = response.body().string();
msg.obj = result;
msg.what = success;
handlerThreadHelper.mHandler.sendMessage(msg);
}
} catch (Exception e) {
onFailure(call, null);
}
}
}
例子DemoPresenter.java
import android.app.Service;
import android.os.Message;
public class DemoPresenter extends AbsHandlerThreadHelper {
private TestRun testRun;
public DemoPresenter(Service t) {
super(t);
testRun = new TestRun(this, 3, 2);
}
@Override
public void dispatchMessage(Message msg) {
LogDebug.e(getContext(), "DemoPresenter.dispatchMessage:" + msg.what);
}
@Override
public void onDestroy() {
}
public void register() {
mExecutorService.execute(testRun);
}
private static class TestRun extends AbsOkHttpThread {
public TestRun(AbsHandlerThreadHelper handlerThreadHelper, int success, int fail) {
super(handlerThreadHelper, success, fail);
}
@Override
public void runPro() {
AbsHandlerThreadHelper absHandlerThreadHelper = mReference.get();
Service context = absHandlerThreadHelper.getContext();
if (context != null) {
OkHttp3Utils.getInstance(context).doPostPro("http://www.google.com", null, "{}", this);
}
}
}
}
Android 封装handler,android封装工作线程跟Handler工具类相关推荐
- 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...
本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...
- Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码
Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...
- 常用并发工具类(锁和线程间通信工具类)
常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...
- Java 线程 - 基础及工具类 (二)
Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...
- android dialog 隐藏状态栏_Android开发不得不收集的工具类集合
嗨,你终于来啦 ~ 等你好久啦~ 喜欢的小伙伴欢迎关注,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿.更新了几天Android基 ...
- 【Android】详解7.0带来的新工具类:DiffUtil
本文出自: [张旭童的博客] 博客地址:http://blog.csdn.net/zxt0601/article/details/52562770 一 概述 DiffUtil是support-v7:2 ...
- android 蓝牙低功耗(BLE)非常棒的工具类,获取小米手环的步数
现在物联网搞的轰轰烈烈的,小米的手环等一系列产品,下面我们就来研究一下小米手环的记步功能 工具类 package com.zsl.bluetoothdemo.ble;import android.bl ...
- Android 项目必备(九)--> 项目常用工具类
文章目录 AppUtils.java DeviceUtils.java NetUtils.java DateUtil.java DensityUtil.java FileUtils.java Stri ...
- android 动态录音权限,Android如何判断手机是否有录音权限的工具类
作用 判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统 测试环境 这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android ...
最新文章
- 打桥位lisp_lisp函数
- 深度学习 load_data_fashion_mnist
- 自己设计java流程审核_关于工作流引擎取回审批的设计方案与实现过程
- shell语法 06-Linux文本处理-grep
- 括号匹配不一定用栈哦(洛谷P1739题题解,Java语言描述)
- linux系统软Raid高可用配置
- 数据结构上机实践第四周项目5 - 猴子选大王
- windows批处理命令大全
- BioVendor MxA 蛋白人 ELISA说明书
- (附源码)ssm自助游服务系统 毕业设计 250858
- 不知道RabbitMQ中Exchange类型Internal是什么意思?这边来~
- Vue 2.0 升(cai)级(keng)之旅
- Java中有理数类Rational Number详解
- 跨境电商ERP系统基础开发教程
- oracle中distinct和count函数组合使用
- Webrtc 回音消除 一
- 图像饱和度(Saturation)是什么?(颜色的鲜艳程度)
- 计算机课吐槽,让上课更有趣!这位老师的课学生可发弹幕提问吐槽
- 计算机bootmgr丢失,如何修复BOOTMGR缺少错误
- Facade 门面 —— Mediator 调停者
热门文章
- asp.net core2.2 多用户验证和授权
- Visual Studio 2019 首个预览版本抢先看,有啥新功能?
- 我在微软做研发 | 亚洲创新的科研之力
- AspNetCore中使用Ocelot之 IdentityServer4
- 读 《CSharp Coding Guidelines》有感
- “.Net 社区大会”(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere
- 程序员小测试:保守派 vs 自由派
- IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm
- 计算机专业英语怎么翻译,计算机专业英语翻译(附件).pdf
- mysql索引有哪些了解_Mysql索引(简单了解)