1

Android 中的繁重任务应该在后台线程中执行。繁重的任务是:

  • 数据库任务
  • 处理图像、音频、视频
  • 获取和解析互联网数据
  • 一些广泛的计算(在大多数应用程序中非常罕见)

还有什么可以被认为是一项繁重的任务,应该在后台线程中执行?

我收到 ANR 错误,我需要知道 Android 将哪些任务解释为繁重的任务。

4

2 回答 2

3

系统不会抛出 ANR,因为它注意到您正在做一些它归类为“重”的事情;它会产生 ANR,因为用户界面没有响应。使用调试语句(即 Log.d()),您需要跟踪应用程序的进度,并在收到错误时弄清楚它在做什么(或试图做什么)。例如,UI 线程上的无限循环会产生 ANR,但(可证明)没有办法将任意循环归类为无限循环。

于 2012-07-24T20:44:16.103 回答
2

还有什么可以被认为是一项繁重的任务,应该在后台线程中执行?

如果花费的时间超过几毫秒,则应在后台线程中执行。

感谢 Android 4.1 中的 Project Butter,Android UI 现在以 60fps 的速度更新,这意味着有大约 16 毫秒的时间来完成渲染帧所需的一切。操作系统需要一些时间来进行实际渲染。如果您花费的时间超过几毫秒,您可能会跳过一帧,从而导致“janky”行为。即使在早期版本的 Android 上,也可以看到效果——在 Jelly Bean 上只会更加刺耳,因为其他一切都更加流畅。

于 2012-07-24T20:47:12.130 回答