Handler机制的理解
在Android面试过程中,我们经常会被问到有关Handler机制的问题,如:
- 说说你对Handler机制的理解
- Handler、Looper和MessageQue之间的关系
- 能在子线程创建Handler对象么?有什么注意事项?
- Handler引起的内存泄漏怎么处理?
- Looper能创建多个实例么?我们能自己创建Looper实例么?
- Handler和AsyncTask 的区别
- Android线程间通信有哪几种方式?
、
、
、
Handler机制的理解
handler是Android给我们提供用来更新UI的一套消息处理机制,是为了解决多线程并发的问题。Handler消息机制由Handler,Looper循环和MessageQue组成。
Handler、Looper和MessageQue之间的关系
Handler用于收发处理消息,MessageQue用于存储消息,Looper用于不断从消息队列中取消息发送给Handler处理或者从Handler中接收消息放入消息队列中。
能在子线程创建Handler对象么?有什么注意事项?
可以在子线程创建Handler,但是需要传入Looper对象。若Looper对象不为Looper.getMainLooper()[注:主线程的Looper],则需要使用runOnUiThread()方法辅助更新UI。
Looper能创建多个实例么?我们能自己创建Looper实例么?
一个线程内只能有一个Looper对象。不能自己创建Looper实例,Looper的构造是私有的。
Handler引起的内存泄漏怎么处理?
将内部类改为静态内部类,因为静态内部类不持有外部类引用。由于Handler不再持有外部类引用,导致程序不允许你在Handler中操作Activity中的对象了。所以你还需要在Handler中增加一个对Activity的弱引用(使用弱引用的好处在于:activity一旦被置为null,他就会被立刻回收)。
Android线程间通信有哪几种方式?
一般有如下几种方式
① Handler
② AsyncTask
③ Broadcast
④ EventBus
⑤ RxBus
⑥ 观察者
Handler和AsyncTask 的区别
asyncTask是基于Thread和Handler实现的辅助类;
asyncTask简单,快捷,过程可控,适用于简单的异步处理
Handler结构清晰,功能定义明确,对于多个后台任务时,简单,清晰,适用于多任务异步处理