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<T extends Context> {

	protected ExecutorService mExecutorService;

	private WeakReference<T> mContextWeakReference;

	protected HandlerInner<T> mHandler;

	protected static class HandlerInner<T  extends Context> extends Handler {

		private WeakReference<AbsHandlerThreadHelper<T>> mWeakReference;

		public HandlerInner(AbsHandlerThreadHelper<T> handlerThreadHelper) {
			super();
			this.mWeakReference = new WeakReference<AbsHandlerThreadHelper<T>>(handlerThreadHelper);
		}

		@Override
		public void dispatchMessage(Message msg) {
			super.dispatchMessage(msg);
			AbsHandlerThreadHelper<T> handlerThreadHelper = mWeakReference.get();
			if (handlerThreadHelper != null) {
				handlerThreadHelper.dispatchMessage(msg);
			}
		}
	}

	public AbsHandlerThreadHelper(T t) {
		super();
		this.mContextWeakReference = new WeakReference<T>(t);
		init();
	}

	private void init() {
		mExecutorService = Executors.newCachedThreadPool();
		mHandler = new HandlerInner<T>(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<T extends Context> implements Runnable {

	protected WeakReference<AbsHandlerThreadHelper<T>> mReference;

	public AbsThread(AbsHandlerThreadHelper<T> handlerThreadHelper) {
		super();
		this.mReference = new WeakReference<AbsHandlerThreadHelper<T>>(handlerThreadHelper);
	}

	@Override
	public void run() {
		synchronized (this) {
			AbsHandlerThreadHelper<T> 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<T extends Context> extends AbsThread<T> implements Callback {

	private int success = 0;

	private int fail = -1;

	public AbsOkHttpThread(AbsHandlerThreadHelper<T> handlerThreadHelper) {
		super(handlerThreadHelper);
	}

	public AbsOkHttpThread(AbsHandlerThreadHelper<T> handlerThreadHelper, int success, int fail) {
		super(handlerThreadHelper);
		this.success = success;
		this.fail = fail;
	}

	@Override
	public void onFailure(Call call, IOException exception) {
		AbsHandlerThreadHelper<T> handlerThreadHelper = mReference.get();
		if (handlerThreadHelper != null) {
			handlerThreadHelper.mHandler.sendEmptyMessage(fail);
		}
	}

	@Override
	public void onResponse(Call call, Response response) throws IOException {
		try {
			AbsHandlerThreadHelper<T> 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<Service> {

	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<Service> {

		public TestRun(AbsHandlerThreadHelper<Service> handlerThreadHelper, int success, int fail) {
			super(handlerThreadHelper, success, fail);
		}

		@Override
		public void runPro() {
			AbsHandlerThreadHelper<Service> absHandlerThreadHelper = mReference.get();
			Service context = absHandlerThreadHelper.getContext();
			if (context != null) {
				OkHttp3Utils.getInstance(context).doPostPro("http://www.google.com", null, "{}", this);
			}
		}
	}
}

 

转载于:https://my.oschina.net/moziqi/blog/893063

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值