Handler 的高级封装

来源:互联网 发布:技术总监 知乎 编辑:程序博客网 时间:2024/06/05 10:25

在我们使用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);    }}