Looper和Handler

一般情况下,我们启动一个线程,是让它完成一件任务,完成该任务后,线程就退出了。还有一种情况,我们希望该线程一直在运行,我们会时不时的向该线程发送一些消息,线程接收到该消息后,执行相应的操作,执行完成后,线程不退出,等待下一个消息,这很像所谓的“事件触发”。在Android上,使用Looper和Handler很容易实现该功能。
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();


public class LoopThread extends Thread { public interface HandlerCreater { Handler createHandler(); } private Handler mHandler = null; private HandlerCreater mHandlerCreater; LoopThread(HandlerCreater hc) { mHandlerCreater = hc; } @Overwrite public void run() { Looper.prepare(); mHandler = mHandlerCreater.createHandler(); Looper.loop(); mHandler = null; } public void sendMessage(Message msg) { if (null != mHandler) { mHandler.sendMessage(msg); } } } 这样,在主线程中只要实现一个HandleCreater,创建出自己合适的Handler,然后就可以启动线程,并向其发消息了。
跳出消息循环使用:Looper.myLooper().quit();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android开发中,主线程(也被称为UI线程)负责处理与用户交互的操作,例如响应用户的点击事件、更新UI界面等。而子线程则是用于执行一些耗时的任务,比如网络请求、数据库操作等。 为了实现在子线程中更新UI界面的需求,Android提供了Handler和Looper机制。Looper是一个负责循环消息队列的类,它负责从消息队列中取出消息,然后将其分发给对应的Handler进行处理。 在子线程中使用Looper来处理消息时,需要首先调用Looper.prepare()方法来准备Looper,然后调用Looper.loop()方法来循环处理消息,直到Looper.quit()被调用停止循环。在调用Looper.loop()之前,需要先创建一个Handler的实例,并将其与当前线程的Looper关联起来。这样,子线程中的Looper才能将消息分发给相应的Handler进行处理。可以使用Handler的post()、sendMessage()等方法来向子线程的消息队列中发送消息。 使用子线程的LooperHandler机制,可以实现在子线程中更新UI界面的需求,避免在主线程中执行耗时操作导致界面卡顿的问题。然而,需要注意的是,在子线程中使用LooperHandler时要避免在UI界面的更新操作过于频繁,以免影响用户体验和性能。 总结一下,Android在子线程中使用LooperHandler的目的是为了实现在子线程中更新UI界面的需求,通过创建Looper实例并循环处理消息,将消息分发给对应的Handler进行处理。这样就能在子线程中更新UI界面,提高程序的性能和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值