还有什么被认为是Android中的重任?

时间:2012-07-24 20:40:01

标签: android multithreading user-interface background-process

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

  

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

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

在Android 4.1中由Project Butter提供,Android UI现在以60fps更新,这意味着有大约16ms的时间来完成渲染帧所需的一切。操作系统需要一些时间来进行实际渲染。如果你花费超过几毫秒,你可能会跳过一个框架,导致“janky”行为。即使在早期版本的Android上,也可以看到效果 - 它会对Jelly Bean产生更大的影响,因为其他一切都比较顺畅。