handler提供异步处理的功能,发送和接收不是同时进行的java
handler是android操做系统的线程通信工具android
做用:(1)安排消息或runable 在主线程中某个地方执行(2)安排一个动做在另一个线程中执行异步
维护两个队列:(1)消息队列:发送、接受、处理消息 (2)Runable队列:启动、结束、休眠线程工具
使用的步骤:(1)建立handler对象 (2)建立runable 和消息 (3)调用post或sendMessage方法将runable和消息添加到队列。oop
一.关于runable队列(android 线程异步处理机制 post()---------------)post
handler维护一个线程队列,当向队列发送一个runable后,马上返回,并不理会runable是否被执行 ui
方法:spa
1.mHandler.post(Runable) 直接加入到线程队列操作系统
2.mHandler. postDelayed(Runable,long); 延迟一段时间,将runable 加入队列线程
3.mHandler.postAtTime(Runable,long) 定时加入线程队列
4.mHandler.removeCallback (Runable)
2、消息队列 (anddroid 消息异步处理机制 sendMessage() -------------- handlerMessage())
1.初始化 Message msg = mHandler.obtainMessage(); 消息对象
2.加入数据 msg.setData(Bundle bundle) Bundle对象
3.取出数据 msg.getData()
发送到消息队列方法
1.mHandler.sendMessage(Message)
2.msg.sendToTarget();
3.mHandler.sendMessageDelayed(Message,long)
4.mHandler.senMessageAtTime(Message,long)
处理消息的的方法
Hander mHandler = new Handler(){ public void handleMessage(Message msg){ } };
3、handler的两个做用
安排消息或runnable 在某个主线程中某个地方执行
Handler mHandler = new Handler(); mHandler.post(new Runnable{});
2.安排一个动做在另一个线程中执行
new Thread{ public void run{ mHandle.post(new Runnable); } }
4、Looper
1. Looper实际上就是消息队列+消息循环
2.,Handler能够看作是Looper的接口,用来向指定的Looper发送消息以及定义处理方法。默认状况下Handler会与其所在线程的Looper绑定
方法:
1. Looper.prepare();启用looper
2.Looper.loop() 让looper开始工做
3.mHandler.getLooper().quit() 中止looper
3.Handler异步的实现
Handler是经过HandlerThread 使得子线程与主线程分属不一样线程的。实际上,HandlerThread 是一个特殊的线程,它是一个封装好Looper的线程
这样,就实现了handler的异步处理机制,在调用handler.post()方法,经过打印线程ID能够得知,子线程与主线程是分属不一样线程的
参考文章 :