直接上代码,不解说 - -

基于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工具类相关推荐

  1. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  2. Android旋转视频工具类,Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】...

    本文实例讲述了Android开发实现的IntentUtil跳转多功能工具类.分享给大家供大家参考,具体如下: 说明:此工具类是本人开发中总结下来的,还有其它的跳转亲给我留言,希望大家一起把这个工具类打 ...

  3. Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码

    Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...

  4. 常用并发工具类(锁和线程间通信工具类)

    常用并发工具类总结 JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock.ReentrantReadWriteLock.CountDownLatch.CyclicB ...

  5. Java 线程 - 基础及工具类 (二)

    Java 并发系列文章 Java 线程 - 并发理论基础(一) Java 线程 - 基础及工具类 (二) Java 线程 - 并发设计模式 (三) Java 线程(二) 通用的线程生命周期 Java ...

  6. android dialog 隐藏状态栏_Android开发不得不收集的工具类集合

    嗨,你终于来啦 ~ 等你好久啦~ 喜欢的小伙伴欢迎关注,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿.更新了几天Android基 ...

  7. 【Android】详解7.0带来的新工具类:DiffUtil

    本文出自: [张旭童的博客] 博客地址:http://blog.csdn.net/zxt0601/article/details/52562770 一 概述 DiffUtil是support-v7:2 ...

  8. android 蓝牙低功耗(BLE)非常棒的工具类,获取小米手环的步数

    现在物联网搞的轰轰烈烈的,小米的手环等一系列产品,下面我们就来研究一下小米手环的记步功能 工具类 package com.zsl.bluetoothdemo.ble;import android.bl ...

  9. Android 项目必备(九)--> 项目常用工具类

    文章目录 AppUtils.java DeviceUtils.java NetUtils.java DateUtil.java DensityUtil.java FileUtils.java Stri ...

  10. android 动态录音权限,Android如何判断手机是否有录音权限的工具类

    作用 判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统 测试环境 这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android ...

最新文章

  1. 打桥位lisp_lisp函数
  2. 深度学习 load_data_fashion_mnist
  3. 自己设计java流程审核_关于工作流引擎取回审批的设计方案与实现过程
  4. shell语法 06-Linux文本处理-grep
  5. 括号匹配不一定用栈哦(洛谷P1739题题解,Java语言描述)
  6. linux系统软Raid高可用配置
  7. 数据结构上机实践第四周项目5 - 猴子选大王
  8. windows批处理命令大全
  9. BioVendor MxA 蛋白人 ELISA说明书
  10. (附源码)ssm自助游服务系统 毕业设计 250858
  11. 不知道RabbitMQ中Exchange类型Internal是什么意思?这边来~
  12. Vue 2.0 升(cai)级(keng)之旅
  13. Java中有理数类Rational Number详解
  14. 跨境电商ERP系统基础开发教程
  15. oracle中distinct和count函数组合使用
  16. Webrtc 回音消除 一
  17. 图像饱和度(Saturation)是什么?(颜色的鲜艳程度)
  18. 计算机课吐槽,让上课更有趣!这位老师的课学生可发弹幕提问吐槽
  19. 计算机bootmgr丢失,如何修复BOOTMGR缺少错误
  20. Facade 门面 —— Mediator 调停者

热门文章

  1. asp.net core2.2 多用户验证和授权
  2. Visual Studio 2019 首个预览版本抢先看,有啥新功能?
  3. 我在微软做研发 | 亚洲创新的科研之力
  4. AspNetCore中使用Ocelot之 IdentityServer4
  5. 读 《CSharp Coding Guidelines》有感
  6. “.Net 社区大会”(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere
  7. 程序员小测试:保守派 vs 自由派
  8. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm
  9. 计算机专业英语怎么翻译,计算机专业英语翻译(附件).pdf
  10. mysql索引有哪些了解_Mysql索引(简单了解)