Handler,Looper,MessageQueue的工作原理

功能划分

Handler的使用必须与几个组件一起。

*Message: Handler接收和处理的消息对象,类似于一个业务类,封装了一些变量。
*MessageQueue:一个队列容器,采用先进先出的原则管理Message。程序创建Looper对象的时候会在构造函数中创建MessageQueue对象。
*Looper:负责管理MessageQueue和Message对象,读取到MessageQueue中的Message之后就会采用sendMessage的方式把消息发送给对应(发送该消息)的Handler来处理。

要在一个线程中使用Handler,则该线程中必须要有一个MessageQueue对象。而MessageQueue是由Looper来管理的。所以在一个线程中必须要有一个Looper对象,而且每个线程只能有一个Looper对象。

而根据线程的不同分类,Handler的使用就大致可以分为两种情况。

UI线程使用Handler

分析

在UI线程中无需创建Looper对象,因为在应用启动,UI线程启动的时候 系统已经自动创建了一个Looper对象。

这里就要提到一个类ActivityThread,这个类是程序启动的入口
下面是该类的部分源码

public final class ActivityThread {
     
    ......  

    public static final void main(String[] args) {  
        ......  

        Looper.prepareMainLooper();  

        ......  

        ActivityThread thread = new ActivityThread();  
        thread.attach(false);  

        ......  

        Looper.loop();  

        ......  

        thread.detach();  

        ......  
    }  
} 

其中可以看到该类中的main函数,这个函数就是进程的入口函数。在main函数中调用了 Looper.prepar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值