在我们使用Handler的时候 一般会在主线程中进行 发送消息或者是更新UI。
可能会出现线程错误异常,因此我们需要在工作线程使用的时候进行二次处理,下面的Handler封装将使用于任何地方。
public class MainLooper extends Handler {
//Looper.getMainLooper() 获取主线程
private static MainLooper instance = new MainLooper(Looper.getMainLooper());
private MainLooper(Looper looper) {
super(looper);
}
public static MainLooper getInstance() {
return instance;
}
/**
* 运行在主线程(发消息、更新UI)
* @param runnable
*/
public static void runOnUiThread(Runnable runnable) {
//当前是否为主线程
if (Looper.getMainLooper().equals(Looper.myLooper())) {
runnable.run();
} else {
instance.post(runnable);
}
}
/**
* 运行在主线程(发消息、更新UI) 有延迟
* @param runnable
* @param delayMillis
*/
public static void runOnUiThreadDelay(Runnable runnable, long delayMillis) {
if (Looper.getMainLooper().equals(Looper.myLooper())) {
runnable.run();
} else {
instance.postDelayed(runnable, delayMillis);
}
}
/**
* 移除 runnable
* @param runnable
*/
public static void removeRunable(Runnable runnable) {
instance.removeCallbacks(runnable);
}
}