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);

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法

usingSystem;usingSystem.IO;usingSystem.Data;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Security;usingSystem.Security.Cryptography;/**//* * .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法…

WPF中TreeView.BringIntoView方法的替代方案

WPF中TreeView.BringIntoView方法的替代方案 周银辉 WPF中TreeView.BringIntoView()方法并不是那么地好用,不少时候会没有效果,这里有一个替代方案,调用SelectItem()方法可以展开并呈现TreeView…

C# WPF MVVM项目实战(进阶①)

这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体TestFormView,然后通过TabControl,将新增的窗体加载到主界面上进行分页显示,新增的页面引用了WPF UI:WPF Datagrid合并表…

双十一变身大型奥数竞赛现场?数学不好的你请转场

当微信又被淘宝“助力”刷屏,我们开始意识到它来了,它真的来了它今天真的来了!令人闻风丧胆的双十一又双叒叕要到了!从最开始的光棍节变成现在的购物节每年双十一的优惠难度堪比南孚电池一节更比一节强小木:阿里&#…

android菜单和对话栏,Android回顾--(十一) 菜单和对话框

选择菜单(OptionsMenu)第一种使用方式:在res目录下面建立一个名称是menu的文件夹在menu下面建立一个xml文件(默认就是menu的类型)在建立的这个xml文件夹中添加菜单的选项,xml文件中有很多属性android:orderInCategory "2" //表示当前的item在…

树莓派:3安装NodeJS

上一节记录有mysql的安装,这一节就主要记录nodejs的安装,最开始的时候我是想直接使用命令直接安装,如: sudo apt-get install nodejs结果发现安装不了,好像是数据源有问题。既然这样不行那么我就自己编译吧&#xff0c…

Exchange Server 2003邮件服务器系统的基本部署思路

<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />以下内容摘自笔者编著的《网管员必读——网络应用》&#xff08;第2版&#xff09;一书&#xff1a; 6.1.4 Exchange Server 2003邮件服务器系统的基本部署思路<?xml:n…

css两栏式布局示例

请先看图,这里主要用到了float属性,该属性的值指出了对象是否及如何浮动 语法&#xff1a; float : none | left |right 参数&#xff1a; none :  对象不浮动;left :  对象浮在左边;right :  对象浮在右边 请看代码,请CSS高手指教,其他还可以用position来实现两栏,只…

HttpClient 禁用自动重定向

HttpClient 禁用自动重定向Intro前段时间写了一个小工具来帮助我们简化一个每个月一次的小任务&#xff0c;每个月我们公司的 BI Team 会给我们上个月访问量比较高的博客文章的 url&#xff0c;然后我们会根据 BI 提供博客的 url 去找到对应的博客 id&#xff0c;然后更新到配置…

OpenAI“单手解魔方”被公开质疑,Gary Marcus称七大问题涉嫌误导

全世界只有3.14 % 的人关注了青少年数学之旅近日&#xff0c;“OpenAI的机器手在4分钟内单手成功还原魔方”引起刷屏&#xff0c;然而&#xff0c;这一成就被著名机器学习怀疑论者马库斯质疑了&#xff0c;马库斯逐条列举OpenAI的误导性说法&#xff0c;机器学习圈却都撑OpenAI…

android 带弧形背景,[Android日常]绘制弧形渐变背景

最近要修改用户空间头部信息显示&#xff0c;参考了好多APP的用户空间&#xff0c;都有一个弧形的背景&#xff0c;看着挺漂亮的。实现这种效果&#xff0c;有两种实现方式&#xff1a;1、作图&#xff1b;2、通过代码进行绘制。今天就讲讲如何通过canvas进行绘制。一、用到的知…

超强的绕口令

今天看到这样一个绕口令&#xff0c;自己读了半天&#xff0c;越读错的越多&#xff0c;呵呵&#xff0c;贴出来大家一起来玩玩1、初入江湖&#xff1a;化肥会挥发 2、小有名气&#xff1a;黑化肥发灰&#xff0c;灰化肥发黑 3、名动一方&#xff1a;黑化肥发灰会挥发&…

世界顶级精英们的人生哲学 【转】

1.别为你自己和别人下定论&#xff0c;你所看到听到的可能只是一面&#xff0c;为这个失去可能的朋友&#xff0c;很不值。 2.你可以有喝醉的时候&#xff0c;我们可以接受&#xff0c;但是你要明白和真正的朋友一醉才能让伤心事方休&#xff0c;否则&#xff0c;你只会是别人的…

记一次 .NET 某云采购平台API 挂死分析

一&#xff1a;背景 1. 讲故事大概有两个月没写博客了&#xff0c;关注我的朋友应该知道我最近都把精力花在了星球&#xff0c;这两个月时间也陆陆续续的有朋友求助如何分析dump&#xff0c;有些朋友太客气了&#xff0c;给了大大的红包&#xff0c;哈哈????&#xff0c;手…

来自女朋友的灵魂拷问!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】

android 栏目编辑,android – 编辑文本导致内存泄漏

介绍&#xff1a;我有一个应用程序具有以下结构&#xff1a;ActionBar顶部(ActionBarSherlock)ViewPagerIndicator下面(对于选项卡)ViewPager(主机片段)我有一个问题,我的一个碎片导致了相当大的内存泄漏.我将问题缩小到以下情况&#xff1a;导致泄漏的片段只会在其onCreateVie…

Spring 事物传播特性

Spring 事物传播特性 这是Spring官方的定义 一共有7种 摘自源码省略了一部分 public interface TransactionDefinition {int PROPAGATION_REQUIRED 0;int PROPAGATION_SUPPORTS 1;int PROPAGATION_MANDATORY 2;int PROPAGATION_REQUIRES_NEW 3;int PROPAGATION_NOT_SUPPORT…

6月,回忆我失去的爱情

6月&#xff0c;夏天早已到来 自4月起&#xff0c;我一直放荡着。这个我在上个文章里已提到&#xff0c;哈哈 放荡两个月后&#xff0c;我回想我自己的爱情 我想明白为什么我会失去自己的爱情&#xff0c;哈哈 终于明白了是为什么&#xff0c;其实失去的这样的简单 我承认我有错…

《你必须知道的.NET》第1章学习笔记

面向对象中几个最基本的概念&#xff1a;类&#xff0c;对象&#xff0c;继承&#xff0c;封装和多态。 对象的出生&#xff0c;只是完成了对必要字段的初始化&#xff0c;其他数据要通过后面的操作来完成&#xff0c;如&#xff1a;属性的赋值&#xff0c;通过方法获取必要信息…

利用 PGO 提升 .NET 程序性能

引子.NET 6 开始初步引入 PGO。PGO 即 Profile Guided Optimization&#xff0c;通过收集运行时信息来指导 JIT 如何优化代码&#xff0c;相比以前没有 PGO 时可以做更多以前难以完成的优化。下面我们用 .NET 6 的 nightly build 版本 6.0.100-rc.1.21377.6 来试试新的 PGO。PG…