一:什么是Handler
1:在子线程做完耗时操作之后,可以通过sendMessage和发送Runnable来通知主线程更新UI。
2:把耗时操作放在子线程,更新UI的操作放在主线程,然后通过Handler发送消息的机制来通知主线程更新UI。
二:handler使用
image.png
三:handler内部机制原理
image.png
1:handler 发送一个message对象到 消息队列,looper(创建的同时,消息队列就绑定好了)对消息队列进行循环,获取到message发送到handler进行处理。
2:handler 发送消息只能发送到它相关的线程
3:在handler的构造方法,创建了looper,并且通过looper创建了messageQueue,所以handler已经和消息队列关联在了一起,并且消息队列是由looper来管理的。三者联系在了一起。
4:heandler中通过ThreadLocal来保存looper,ThreadLocal.get可以让不同线程只能获取各自的looper,确保了每一个线程有单独唯一的looper。(在创建looper.prepare()的方法中创建了ThreadLocal)
5:Looper.loop(),内部创建了一个死循环,然后从消息队列中,逐个去获取消息最后处理消息的过程。
6:handler最后通过 dispatchMessage(Message msg) 方法拿到looper.loop()分发给的message,由对呀的handler的handleMessage方法进行处理。
四:Handler内存泄漏
image.png
网友评论