日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 封装handler,android封装工作线程跟Handler工具类

發布時間:2023/12/4 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。