本文讲解 Looper 死循环为什么不会导致应用卡死。

AMS 和 多线程的问题。

卡死就是 ANR 。

既然 Handler 的消息全都是 loop 来的,为什么我们没有 ANR 问题?之前不是说5秒钟不响应就会出现阻塞问题吗,为什么休眠个好长时间也并不会被 ANR 呢?

唤醒线程的方法:1. looper 中添加 message 。通过 nativeWait() -> loop 运作

                             2. 输入事件

产生 ANR 的问题不是因为主线程睡眠了,而是因为输入事件没有响应,输入事件没有响应他就没有办法唤醒这个 Looper ,才加了这个5秒的限制。

 

真正的 ANR 是消息没有及时处理。按键事件、广播 都是以 Message 形式传递的。

 

结论:因为应用卡死 ANR 压根与这个 Looper 没有关系,应用在没有消息需要处理的时候,它是在睡眠,释放线程;卡死是 ANR ,而 Looper 是睡眠。

 

如果本文对你有帮助,请点赞支持!!!

更多相关文章

  1. Android开发——消息处理传递机制
  2. 在 Android(安卓)4.4.4 上,分析 input -- android framework 部分
  3. Android中AsyncTask的简单总结
  4. Android(安卓)Things:用户驱动-输入驱动
  5. 提高Android应用程序的速度四大原则
  6. Android嵌套滑动-Behavior方案实战及细节注意
  7. Android异步操作 AsyncTask
  8. 剖析Android中进程与线程调度之nice
  9. Android(安卓)Monkey工具

随机推荐

  1. Watchdog in Android
  2. Spinner的详解
  3. Android超炫酷烟花程序
  4. Handler使用总结
  5. Android&Js相关
  6. Android Studio快捷键-mac版
  7. Android(安卓)studio加载so调用本地方法
  8. android 个人论坛地址
  9. android--创建桌面快捷方式
  10. Andorid环境Python编程