Android Handler
一、handler 是什么?
更新ui。
发送消息,处理消息。
二、handler 怎么用?
sendMessage
sendMessageDelayed
post(Runnable)
postDelayed(Runnable,long)
三、handler 的目的
最根本的目的是解决多线程并发问题。
假设如果在一个Activity中,有多个线程去更新UI,并且没有加锁机制,那么就会更新界面错乱。
如果对更新UI的操作都进行加锁处理,又会引起性能下降。
对于以上问题的考虑,android给我没提供了一套更新UI的机制,我们只需要遵循这样的机制就可以了。不用去关系多线程问题,所以更新UI的操作,都是在主线程的消息队列中轮询处理的。
四、那么Handler Looper 与 MessageQueue 是如何关联的呢?
1、 Looper: 自定意线程中的prepare():
注意:主线程启动时调用的是 prepareMainLooper()
2、而同时,Looper同时绑定了一个MessageQueue(作为属性);
3、Handler()中又与Looper,looper.messageQueue关联。
4、至此完成三者绑定。
5、Looper.loop() 的调用,导致MessageQueue 开始循环工作,取出message,调用message.target——> handleMessage()
补充说明:handler.sendMessage ——>间接调用如下方法,将MessageQueue中的Message.target设置成发送Message的handler自身
五、android中更新UI的几种方式
1、handler.sendMessage();
2、handler.post(Runnable);
3、runOnUIThread(Runnable);
(2、 3、都是通过在UI线程中 新建一个handler对象,通过最终调用handler中的达到,调用handleCallback(msg),从而调用runnable.run())
4、view.post(Runnable);
本质上都是通过handler更新UI。