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

一、消息处理中的主要概念 “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 “消息队列”是 Microsoft 的消息处理技术,它在任何安装了 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。 “消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。 “消息队列”安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。 “消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销,确定经过多个站点传递消息的最快和最有效的方法,以此决定如何传递消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值