Handler消息机制

先举个子线程中使用Handler的例子:

package com.haoran.myhandler;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
   
    Looper looper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(){
            @Override
            public void run() {
                System.out.println("子线程中打印线程名:"+Thread.currentThread().getName());
                Looper.prepare();
                looper = Looper.myLooper();
                looper.loop();

            }
        }.start();
        Handler handler = new Handler(looper){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                System.out.println("主线程中打印线程名:"+Thread.currentThread().getName());
            }
        };
        Message message = Message.obtain();
        handler.sendMessage(message);
    }
}

大家看了这段代码估计会有疑惑,子线程中怎么没有new Looper()? Handler(looper)的构造做了什么操作?

那好,我们debug运行下
这里写图片描述

其实
从 FrameWork层 MainActivity.class –> Activity.class –> ActivityThread.class –> ActivityThread.class中的内部类(H.class) 和main方法。
这里写图片描述
Handler消息机制起了很大的作用,从四大组件的启动,模板模式进行生命周期方法的回调,都是消息机制在默默的进行着。从源码层看,安卓主线程在创建过程中,在ActivityManager的main入口,通过自动初始化了一个Looper和Handler以及handleMessage方法进行消息机制 再通过H.class中进行四大组件的消息机制的判断
消息类型定义:
消息类型
消息处理方法:
消息处理
我们说了半天的Handler消息机制的重要性好像和Handler消息机制原理没有半毛钱关系,最开始代码引发我们思考的问题依然无法回答。

下面我们从Handler消息机制的UML图,及相关类源码进一步进行分析,先上图:
这里写图片描述

这张架构图我们可以花时间分型一下,分析他们之间互相持有的关系。哈哈,这里我就简单概述一下,再走一下源码。。。

首先
作为一个合格的助手,Handler里有mQueue和mLooper对象;于是就有了消息队列MessageQueue和轮询器Looper,再将消息Message放在消息队列里面。Message记录着相对应的Handler,MessageQueue里持有Message对象,Looper通过持有的MessageQueue对象,对消息进行轮询读写

图解:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值