【Android】Handler 中 Looper 死循环为什么不会导致应用卡死的问题

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

AMS 和 多线程的问题。

卡死就是 ANR 。

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

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

                             2. 输入事件

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

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

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

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

猜你喜欢

转载自blog.csdn.net/cnwutianhao/article/details/107646740