android 子线程和主线程数据交互_腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程...

面试官: 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值