Handler简析

Handler是android用来线程切换的,主要的工作原理是Handler通过sendMessage发送一个Message到MessageQueue中,它是一个单向链表结构。Handler都是需要有一个Looper的,因为在他的初始化中会去检查这个Looper是否存在,不存在则报错,所以在使用Handler前需要Looper.prepare,然后开启Looper.loop循环从消息队列中取出数据,通过Message的msg.target.dispatchMessage(msg);发送到Handler处理。需要注意:Message默认持有Handler的引用,很容易造成内存泄漏。我们平时不需要初始化Looper是因为在ActivityThread主线程中的main方法中默认实现了Looper.prepareMainLooper,所以如果你的Looper是在Ui线程初始化的,那么你的消息处理就是在Ui线程,如果在子线程初始化Looper的话,那么就是在子线程处理消息了。



Handler.sendMessage和Handler.obtainMessage有什么区别?

obtainMessage获取到的Message是从消息池中获取到的,如果消息池中没有消息再去new,而sendMessage传的参数是我们已经new好了的

你可能感兴趣的:(Handler简析)