Handler机制的理解

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结构清晰,功能定义明确,对于多个后台任务时,简单,清晰,适用于多任务异步处理

猜你喜欢

转载自blog.csdn.net/TomCat0916/article/details/81775669
今日推荐