handler 学习总结

         在Android中,当一个程序第一次启动时,Android会同时启动一条主线程来负责处理UI相关的事件,此时如果有多个线程并发操作UI组件,可能导致线程安全问题,所以Android只允许UI线程修改Activity里的UI组件。这就产生了一个问题,怎么样实现新启动的线程能动态改变界面组件的属性值呢?Handler的消息传递机制恰好解决了这个问题。

     Handler类的主要作用两个:第一,可以在新启动的线程中发送消息。第二,在主线程中去获取和处理消息。然而,Handler发送消息时,必须把消息送到指定的MessageQueue消息队列中进行保存,MessageQueue采用先进先出的方式来管理Message。而MessageQueue是由Looper负责管理的,Looper不断地从MessageQueue中取出消息并分给对应的Handler进行处理。所以当前线程中必须要有一个Looper对象才能保证Handler正常工作。

     怎样保证当前线程中有Looper对象呢?分两种情况:1,在主UI线程中,系统已经初始化了一个Looper对象,所以直接创建Handler即可。2,在自己写的子线程中,需要自己创建一个Looper对象,用Looper.prepare()即可。创建完后,它的构造器会自动创建与之配套的MessageQueue。然后创建Handler子类的实例,重写handleMessage()方法,处理来自其他线程的消息。最后,调用Looper.loop()启动Looper。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值