面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来。开发者很难注意到一个主线程的四循环居然没有阻塞住主线程
求职者:应该从 主线程的消息循环机制 与Linux的循环异步等待作用讲起。最后将handle引起的内存泄漏,内存泄漏一定是一个加分项
先上一份整理好的面试目录
前言
Android的消息机制主要是指Handler的运行机制,对于大家来说Handler已经是轻车熟路了,可是真的掌握了Handler?本文主要通过几个问题围绕着Handler展开深入并拓展的了解。
站在巨人的肩膀上会看的更远。大家有兴趣的也可以到Gityuan的博客上多了解了解,全部都是干货。而且他写的东西比较权威,毕竟也是小米系统工程师的骨干成员。
Questions
- Looper 死循环为什么不会导致应用卡死,会消耗大量资源吗?
- 主线程的消息循环机制是什么(死循环如何处理其它事务)?
- ActivityThread 的动力是什么?(ActivityThread执行Looper的线程是什么)
- Handler 是如何能够线程切换,发送Message的?(线程间通讯)
- 子线程有哪些更新UI的方法。
- 子线程中Toast,showDialog,的方法。(和子线程不能更新UI有关吗)
- 如何处理Handler 使用不当导致的内存泄露?
回答一: Looper 死循环为什么不会导致应用卡死?
线程默认没有Looper的,如果需要使用Handler就必须为线程创建Looper。我们经常提到的主线程,也叫UI线程,它就是ActivityThread,ActivityThread被创建时就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。
首先我们看一段代码
new Thread(new Runnable() { @Override public void run() { Log.e("qdx