android Looper内部如何工作而不阻塞线程?

问题描述 投票:0回答:1

Android 提供了 Handler 和 Looper,可以从任何后台线程直接在 UI 线程上发送消息/运行代码。如果您查看该机制的实现,您会发现在

loop()
方法内部,有一个无限循环正在运行,用于等待/轮询消息。

我的问题是,即使在线程中存在无限循环之后,Android如何保持UI响应并在同一线程中运行其余代码?

参考:https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/Looper.java

java android multithreading native android-looper
1个回答
0
投票
Android 应用程序的

主线程负责 UI。它需要处理所有触摸事件并同时完成所有绘图。

主循环中的无限循环使线程在等待某些用户交互时保持活动状态。

保持 UI 响应的唯一方法是确保主线程上运行的所有代码块(通过消息队列和循环器)快速完成其工作。这是开发商的责任。

阻塞主线程并不难。如果您实现的某些回调需要超过 1/60 秒的时间来执行,那么 UI 将降级(动画将无法顺利运行,点击和滚动将滞后,等等)。

如果主线程阻塞超过几秒,用户将收到“应用程序未响应”(ANR) 对话框。

© www.soinside.com 2019 - 2024. All rights reserved.