Android 中的繁重任务应该在后台线程中执行。繁重的任务是:
- 数据库任务
- 处理图像、音频、视频
- 获取和解析互联网数据
- 一些广泛的计算(在大多数应用程序中非常罕见)
还有什么可以被认为是一项繁重的任务,应该在后台线程中执行?
我收到 ANR 错误,我需要知道 Android 将哪些任务解释为繁重的任务。
Android 中的繁重任务应该在后台线程中执行。繁重的任务是:
还有什么可以被认为是一项繁重的任务,应该在后台线程中执行?
我收到 ANR 错误,我需要知道 Android 将哪些任务解释为繁重的任务。
系统不会抛出 ANR,因为它注意到您正在做一些它归类为“重”的事情;它会产生 ANR,因为用户界面没有响应。使用调试语句(即 Log.d()),您需要跟踪应用程序的进度,并在收到错误时弄清楚它在做什么(或试图做什么)。例如,UI 线程上的无限循环会产生 ANR,但(可证明)没有办法将任意循环归类为无限循环。
还有什么可以被认为是一项繁重的任务,应该在后台线程中执行?
如果花费的时间超过几毫秒,则应在后台线程中执行。
感谢 Android 4.1 中的 Project Butter,Android UI 现在以 60fps 的速度更新,这意味着有大约 16 毫秒的时间来完成渲染帧所需的一切。操作系统需要一些时间来进行实际渲染。如果您花费的时间超过几毫秒,您可能会跳过一帧,从而导致“janky”行为。即使在早期版本的 Android 上,也可以看到效果——在 Jelly Bean 上只会更加刺耳,因为其他一切都更加流畅。