0,Handler对象必须依赖Looper才能工作,Handler使用的是哪个线程的Looper,handleMessage()方法就在哪个线程执行。(顺便说明:Handler的post和sendMessage方法本质上是一样的,使用同一个队列,可以去参见源码)
1,主线程默认拥有Looper,因此可以直接使用Handler。
2,子线程默认没有Looper,要想在子线程中使用Handler,典型例子如下:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
3,HandlerThread继承自Thread,带有Looper。
Handy class for starting a new thread that has a looper. The looper can then be
used to create handler classes. Note that start() must still be called.
典型用法如下:
HandlerThread handlerthread=new HandlerThread("线程名");
handlerthread.start();//start方法必须先调用,否则handlerthread的Looper将为null,可参见sdk源码
Handler handler= new Handler(handlerthread.getLooper()){
@Override
public void handleMessage(Message msg) {
System.out.println("Thread("+Thread.currentThread().getId()+","+Thread.currentThread().getName());
}
};
HandlerThread主要是在Thread的基础上增加了一个Looper对象,HandlerThread一旦start后不会自行结束,当要做的事完成之后我们应该将其结束并释放Looper以避免无谓的系统资源浪费,调用HandlerThread.quit()方法即可
分享到:
相关推荐
在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...
通过自定义Handler、Looper、Message.浅析Android线程间通信原理
android 多线程 looper handler的讲解,轻松学明白androd的消息机制,附有很多实例。
简单实现更新UI的操作,仅供学习参考 这里用到handler类,runnable类,按钮的点击事件
Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. 简单定义: 1、Message Queue(消息队列): 用来存放通过Handler发布的消息,通常...
Android ,Handler,Looper,Message
博客展示地址:http://blog.csdn.net/icedcap/article/details/20076615
Android中多线程的Handler的工作原理,其中涉及到MessageQueue和Looper。详情可以参见博客:http://www.cnblogs.com/plokmju/p/android_Looper.html
Handler,AsyncTask,Looper自定义线程使用示例,自定义线程与UI线程交互,访问UI线程控件
作用: 跨线程通信,异步通信。...MessageQueue(消息队列):由Looper负责管理,管理Handler发送过来的Message,其底层实现采用的是单链表。 Handler(处理者):负责Message的发送及处理。通过 Handler.send
Looper和Handler实现UI线程和子线程的通信
NULL 博文链接:https://null-point.iteye.com/blog/1443287
Handler消息传递详解,子线程到子线程,主线程到子线程,子线程到主线程 三种消息,Looper,Handler工作机制详解 https://blog.csdn.net/shoneworn/article/details/80447651
在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?...与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。 Handl
线程A的Handler对象参考可以传递给别的线程,让别的线程B或C等能送讯息来给线程A(存于A的Message Queue里)。 线程A的Message Queue里的讯息,只有线程A所属的对象可以处理之。 使用Looper.myLooper可以取得...
Handler与AsyncTask使用示例,Handler AsyncTask 示例 looper
文档详细介绍了Handler实现线程间通信过程中源码的实现机制,并对其中的Looper,MessageQueue,Message对象的初始化及sendMessage()通过sendMessageDelayed()和sendMessageAtTime()过程的操作机流程
1.Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 2.Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue...
demo01: 通过handler.post()的方法可以更新ui demo02: 一秒钟切换一张图片 demo03: 霓虹灯动态效果的显示 demo04: 倒计时,停止倒计时 ...demo11: 自己写的looper线程,handler和线程绑定 demo12: 更新ui的四种方式