Android开发分享Android开发Android技术知识

2019中级Android开发面试解答之Handler

2019-07-01  本文已影响8人  987edf3ecfa4

注:因为实际开发与参考答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解!面试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。

Handler

1.谈谈消息机制Handler作用 ?有哪些要素 ?流程是怎样的 ?

参考回答:

负责跨线程通信,这是因为在主线程不能做耗时操作,而子线程不能更新UI,所以当子线程中进行耗时操作后需要更新UI时,通过Handler将有关UI的操作切换到主线程中执行。

具体分为四大要素
具体流程如下

2.一个线程能否创建多个Handler,Handler跟Looper之间的对应关系 ?

参考回答:

3.软引用跟弱引用的区别

参考回答:

4.Handler 引起的内存泄露原因以及最佳解决方案

参考回答:
泄露原因

5.为什么系统不建议在子线程访问UI?

参考回答:
Android的UI控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可预期的状态

这时你可能会问为何系统不对UI控件的访问加上锁机制呢?因为

6.Looper死循环为什么不会导致应用卡死?

参考回答:

7.使用Handler的postDealy后消息队列会有什么变化?

参考回答:
如果队列中只有这个消息,那么消息不会被发送,而是计算到时唤醒的时间,先将Looper阻塞,到时间就唤醒它。但如果此时要加入新消息,该消息队列的对头跟delay时间相比更长,则插入到头部,按照触发时间进行排序,队头的时间最小、队尾的时间最大

8.可以在子线程直接new一个Handler吗?怎么做?

参考回答:

不可以,因为在主线程中,Activity内部包含一个Looper对象,它会自动管理Looper,处理子线程中发送过来的消息。而对于子线程而言,没有任何对象帮助我们维护Looper对象,所以需要我们自己手动维护。所以要在子线程开启Handler要先创建Looper,并开启Looper循环

9.Message可以如何创建?哪种效果更好,为什么?

参考回答:可以通过三种方法创建:

后两者效果更好,因为Android默认的消息池中消息数量是10,而后两者是直接在消息池中取出一个Message实例,这样做就可以避免多生成Message实例。

需要更多学习资料的可以加我的合作群 Android开发交流群:1018342383


上一篇下一篇

猜你喜欢

热点阅读