前言:為了更簡單顿天,更方便,更有效地在Activity中快速使用handler蔑担,并且消除handler所帶來的內(nèi)存泄露等等弊端牌废,所以擼了一個(gè)HandlerUtil工具類。核心類如下啤握,相當(dāng)簡單鸟缕、淳樸,一看就懂的那種:
/**
* @desc handler工具輔助類排抬,方便快速使用handler主線程
* @auth 方毅超
* @time 2017/11/17 11:01
*/
public class HandlerUtil {
private static MyHandler mHandler;
/**
* 直接獲取handler
*
* @return
*/
public static MyHandler getHandler() {
if (mHandler == null)
mHandler = new MyHandler();
return mHandler;
}
/**
* 設(shè)置handler懂从,自定義handleMessage方法所要處理的內(nèi)容。
*
* @param handler
*/
public static void setHandler(MyHandler handler) {
unInit();
mHandler = handler;
}
/**
* 格式化handler
*/
public static void unInit() {
//清除Handler的Message和Runnable
if (mHandler == null) return;
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
}
/**
* 靜態(tài)Handler類蹲蒲,不持有外部context番甩。
*/
public static class MyHandler extends Handler {
private WeakReference<Activity> mActivity;
public MyHandler() {
}
public MyHandler(Activity activity) {
mActivity = new WeakReference<Activity>(activity);
}
// @Override
// public void handleMessage(Message msg) {
// if (mActivity != null) {
// Activity activity = mActivity.get();
// if (activity != null) {
// // ...
// }
// }
// }
}
/**
* 靜態(tài)Runnable類,不持有外部context?
*/
public static abstract class MyRunnable implements Runnable {
public MyRunnable() {
}
// @Override
// public void run() {
// Log.d(TAG, "run: ");
// }
}
}
調(diào)用方法如下:
1届搁、設(shè)置具體的handler缘薛,自定義handleMessage方法所要處理的內(nèi)容
HandlerUtil.setHandler(new HandlerUtil.MyHandler(getActivity()) {
@Override
public void handleMessage(Message msg) {
}
});
2、提交任務(wù)
HandlerUtil.getHandler().postDelayed(new HandlerUtil.MyRunnable() {
@Override
public void run() {
// ToDo
}
}, 500);
3卡睦、保險(xiǎn)起見宴胧,在Activity退出時(shí)清除任務(wù),在onDestroy()中
HandlerUtil.unInit();
后言:在HandlerUtil工具類中的靜態(tài)MyRunnable,這樣寫以及這樣引用不知道能否起到不持有外部context的作用表锻?后續(xù)補(bǔ)上恕齐,或者看客們有什么好提議、好建議瞬逊,歡迎交流显歧,謝謝。