Handler 源码笔记

Handler的设计理念源于生活,其核心在于Looper.loop()的调用位置决定handleMessage的执行线程。本文探讨了HandlerThread和IntentService的使用,以及同步屏障的概念,通过在消息队列中插入特定消息来保障异步消息的优先执行。同时,还介绍了如何使用反射创建和移除消息屏障。
摘要由CSDN通过智能技术生成

Handler

所有的思想设计都是源于生活高于生活。

大概知识点: 源码epoll 设计思路 设计模式 异步消息 同步消息 消息屏障 IntentServer
管理机制: 消息管理所有的消息

所有的代码都在handler中运行的。

MassegeQuaua 是变量 是共享内存的

注意看代码流程:

Looper.loop()–> next() 取消息—>msg.target.dispatchMessage(msg);说明Looper.loop() 在哪个地方调用执行。决定了handleMessage 就是在哪个线程中执行的。

//  这个handler 是在主线程中创建的,
这个Handler 的Looper 默认是getMainLooper()
所以它的Looper.loop() 是在主线程中执行的。
所以handleMessage 里面主线程中执行的。

Handler mHandler = new Handler(){
   
    @Override
    public void handleMessage(@NonNull Message msg) {
   
        Thread.dumpStack();
        Log.i("fw", "handleMessage: "+ Looper.myLooper());
        Log.i("fw", "handleMessage: "+ Looper.getMainLooper());
        super.handleMessage(msg);
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
   
    super.onCreate(savedInstanceState);
    mHandler.sendEmptyMessage(0);}
    // 结果:
2020-09-16 22:39:41.704 9700-9700/com.fengwei.generic I/fw: handleMessage: Looper (main, tid 2) {
   be2e8f1}
2020-09-16 22:39:41.704 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值