Android 中的Handler核心是线程间通信,不要只说是更新UI
目录
Post方式
Post允许把一个Runnable对象入队到消息队列中。它的方法有:
post(Runnable)/postAtTime(Runnable,long)/postDelayed(Runnable,long)
sendMessage
sendMessage允许把一个包含消息数据的Message对象压入到消息队列中。它的方法有:sendEmptyMessage(int)/sendMessage(Message)/sendMessageAtTime(Message,long)/sendMessageDelayed(Message,long)
常见相关API
1和2都是拿到主线程的Handler,然后在调用Handler的post方法
- Activity.runOnUiThread(Runnable)
- View.post(Runnable);View.postDelay(Runnable, long)
- HandlerThread
实现原理
延时发消息
Handler在发送消息的时候,MessageQueue里的消息是按照发送时间点从小到大排列的,
如果最近的Message未到达发送的时间则阻塞。
使用注意事项
- 内存泄漏:使用静态内部类+弱引用的方式
- 在外部类对象被销毁时,将MessageQueue中的消息清空。例如,在Activity的onDestroy时将消息清空。
参考链接: