您的位置:首页 > 移动开发 > Android开发

android的thread、looper、handler机制

2016-01-13 15:59 344 查看
android的应用程序是消息驱动的,并且通过looper、handler来实现消息循环机制,且是针对线程的,一个线程额可以拥有一个(也可以不存在)消息队列和一个消息循环(Looper),特定线程的消息只能分发给本线程,不能进行跨线程、跨进程通信,但是创建的工作线程默认是没有消息队列以及消息循环的,如果想让该线程拥有消息队列和消息循环,需要在线程中调用Looper.prepare()来创建消息队列,然后用Looper.loop()进入消息循环,Handler的作用是把消息加入特定的消息队列中(Looper),并且分发和处理该消息队列中的消息,构造Handler的时候可以指定一个Looper对象,如果不指定则利用当前线程的Looper创建,Activity是一个UI线程,运行于主线程中,android在启动的时候会为Activity创建一个消息队列和一个消息循环,一个Activity中可以创建多个工作线程或者其他的组件,如果这些线程或者组件把他们的消息放入Activity的主线程消息队列中,那么该消息就会在主线程中处理了。之间的关系如下图所示



一个handle对消息的处理不是并发的

handler与调用者处于同一个线程,如果handler里面做耗时的动作,调用者线程会阻塞,androidUI操作不是线程安全的,并且UI操作必须在UI线程中进行,
一个looper只有处理完一个message才会读取下一条,所以消息的处理是阻塞形式的,但如果使用不同的looper则可以达到并发的目的(即使用不同looper实例化handler)。

message资源回收

向handler发送类似 new Message() sendEmptyMessage()形式的空Message可以达到清空Message的目的。如果利用的资源较多,应该及时清理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: