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

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

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

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

前言

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

android 判断主线程_腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程...相关推荐

  1. android判断主线程_惊天秘密!从Thread开始,揭露Android线程通讯的诡计和主线程的阴谋...

    背景介绍 我们在Android开发过程中,几乎都离不开线程.但是你对线程的了解有多少呢?它完美运行的背后,究竟隐藏了多少不为人知的秘密呢?线程间互通暗语,传递信息究竟是如何做到的呢?Looper.Ha ...

  2. 腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

    面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...

  3. android如何阻塞主线程,Android-Android如何避免阻塞主线程

    Android的Handler和AsyncTask,可以避免阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的. AsyncTask,它使创建需要与用户界面交互的长时间运 ...

  4. Android的主线程与子线程

    在上一篇文章Android的进程.线程与优先级中我们提到: 线程(thread):是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.一个进程至少对应一个线程. CP ...

  5. android子线程没有运行完,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    /* String ObjectResult="原先的结果"; //使用VOLLY框架(与问题无关) JsonObjectRequest jsonObjectRequest = n ...

  6. Android,UI主线程与子线程

    在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Co ...

  7. android广播怎样运行在子线程,android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?...

    抛开你这段代码不看,单根据你的标题来回答: android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢? 需要在子线程执行完成的地方,通过主线程的Handler发送一条消 ...

  8. 4.5.2.5_主线程_墨镜滤镜

    4.5.2.5_主线程_墨镜滤镜 <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...

  9. pthread线程传递数据回主线程_操作系统4:线程(1)

    接下来讨论下线程.进程和线程是一个很有趣的话题,进程和线程的区别到底是什么?一些书上讲线程是"轻量级进程",从而可以节省切换开销.但是线程到底是怎么样成为轻量级进程的呢? 可以设想 ...

  10. Android 避免主线程执行网络请求之Activity/Fragment 结束后处理异步回调

    大家都知道Android涉及到与UI相关的操作只能在主线程执行 android4.0以后就禁止在主线程进行网络请求了,在主线程里面执行Http请求都会报NetworkOnMainThreadExcep ...

最新文章

  1. RGB-D对红外热像仪和毫米波雷达标定
  2. seaborn系列 (17) | 回归模型图lmplot()
  3. 汇编语言随笔(14)-直接定址表、检测点16和实验16
  4. php双写绕过,高并发下缓存与数据库双写不一致解决方案
  5. linux网卡入流速,linux下简单限制网卡速度与
  6. 利用注入写Webshell(sql-lab第七关)
  7. QT的Q3DSurface类的使用
  8. 如何启用SAP Cloud Platform的mobile服务
  9. jax-ws和jax-rs_使用JAX-RS和Jetty创建Web服务和Rest Server
  10. Java8排序–性能陷阱
  11. java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. EF 6 code first - 从SQL server迁移到MySQL
  13. php 路由 隐藏index,CI中路由与伪静态、隐藏index.php(十四)
  14. 英寸和厘米的交互python_Python的新手-尝试将厘米编码为英寸,反之亦然
  15. 财务管理c语言oj,九度OJ 1141:Financial Management (财务管理) (平均数)
  16. mediasoup 安裝
  17. 7805急剧发热,可能是什么原因?
  18. gulp mysql_关于MySQL索引的一点小见解
  19. 转:计算机核心刊物(非SCI,EI)投稿指南
  20. python标准输入多行文字_python如何输入多行数据

热门文章

  1. 【车间调度】基于matlab遗传算法求解车间调度问题【含Matlab源码 1396期】
  2. 【电路仿真】基于matlab Simulink四旋翼PID控制【含Matlab源码 454期】
  3. python创建对象_python对象
  4. 部署容器jenkins_使用Jenkins部署用于进行头盔检测的烧瓶容器
  5. 阿里表结构设计mysql_阿里华为P8级架构师教你MySQL数据库设计三范式与反范式
  6. ios 文本翻转_反转文字的方法_深入浅出 iPhone 开发 (使用 Swift4)_iOS视频-51CTO学院...
  7. mysql 针对table的查看命令行
  8. 监控hdfs坏块脚本
  9. 找出2n+1个数中不成对的那个
  10. Hadoop-2.2.0中文文档—— Common - CLI MiniCluster