Handler整理

1. 定义

一套Android消息传递机制


Handler作用流程图.png

2. 基本原理

2.1 相关概念

Handler相关概念图.png

2.2 工作流程

  • 异步通讯准备
  • 消息发送
  • 消息循环
  • 消息处理


    Handler工作流程概述图.png

    Handler工作流程图.png

    Handler工作流程示意图.png

2.3 Thread、Looper和Handler三者的对应关系

线程、循环器和处理者关系图.png

3. 基本使用

3.1 在接收消息的页面创建Handler

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        //接收消息并处理
        Log.i("Handler", "----------" + msg.what);
    }
};//未处理内存泄漏问题

3.2 发消息

new Thread(new Runnable() {
    @Override
    public void run() {
        handler.sendEmptyMessage(99);//发消息
    }
}).start();

3.3 内存泄漏解决方案

/**
* 使用弱引用的方式创建静态内部类
*/
private static class MyHandler extends Handler {
    private final WeakReference<Activity> mActivity;

    private MyHandler(Activity activity) { 
        this.mActivity = new WeakReference<>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        Activity activity = mActivity.get();
        super.handleMessage(msg);
        if (activity != null) {
            Log.i("Handler", "----------" + msg.what);
        }
    }
}

4. 源码分析


参考网站
https://blog.csdn.net/carson_ho/article/details/80175876
https://blog.csdn.net/iispring/article/details/47115879
https://blog.csdn.net/javazejian/article/details/50839443

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android Handler 消息机制】 前言 在Android开发中,我们都知道不能在主线程中执行耗时的任务...
    Rtia阅读 4,892评论 1 28
  • 前言 在Android开发的多线程应用场景中,Handler机制十分常用 今天,我将手把手带你深入分析Handle...
    BrotherChen阅读 479评论 0 0
  • 非主线程创建Handler时,需要调用 Looper.prepare()。 而主线程能够直接创建是因为 Activ...
    进击的杰爷阅读 312评论 0 0
  • Handler设计初衷:处于性能的考虑,android的UI线程不是操作安全的,这就意味着如果多个线程同时操作UI...
    王小冬阅读 512评论 0 3
  • Android Handler机制系列文章整体内容如下: Android Handler机制1之ThreadAnd...
    隔壁老李头阅读 8,240评论 8 57