面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来。开发者很难注意到一个主线程的四循环居然没有阻塞住主线程

求职者:应该从 主线程的消息循环机制 与Linux的循环异步等待作用讲起。最后将handle引起的内存泄漏,内存泄漏一定是一个加分项

先上一份整理好的面试目录

5a3e69eeebff8189504de94501a60b15.png

前言

Android的消息机制主要是指Handler的运行机制,对于大家来说Handler已经是轻车熟路了,可是真的掌握了Handler?本文主要通过几个问题围绕着Handler展开深入并拓展的了解。

站在巨人的肩膀上会看的更远。大家有兴趣的也可以到Gityuan的博客上多了解了解,全部都是干货。而且他写的东西比较权威,毕竟也是小米系统工程师的骨干成员。

Questions

  1. Looper 死循环为什么不会导致应用卡死,会消耗大量资源吗?
  2. 主线程的消息循环机制是什么(死循环如何处理其它事务)?
  3. ActivityThread 的动力是什么?(ActivityThread执行Looper的线程是什么)
  4. Handler 是如何能够线程切换,发送Message的?(线程间通讯)
  5. 子线程有哪些更新UI的方法。
  6. 子线程中Toast,showDialog,的方法。(和子线程不能更新UI有关吗)
  7. 如何处理Handler 使用不当导致的内存泄露?

回答一: Looper 死循环为什么不会导致应用卡死?

线程默认没有Looper的,如果需要使用Handler就必须为线程创建Looper。我们经常提到的主线程,也叫UI线程,它就是ActivityThread,ActivityThread被创建时就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。

首先我们看一段代码

 new Thread(new Runnable() { @Override public void run() { Log.e("qdx
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐