1

Android中的繁重任務應該在後臺線程中執行。重任務是:還有什麼被認爲是Android的沉重任務?

  • 數據庫任務
  • 與圖片,音頻作品,視頻
  • 抓取和分析互聯網數據
  • 一些大量的計算(在大多數應用程序非常罕見)

什麼否則可以被認爲是一個繁重的任務,應該在後臺線程中執行?

我得到一個ANR錯誤,我需要知道Android將哪些任務解釋爲繁重的任務。

+0

無論您的應用程序在獲取錯誤時所做的事情。 – 2012-07-24 20:42:06

+0

@DavidSchwartz我不確定。用戶報告這一點。但主要目的是瞭解是否有其他任務被視爲重度任務。 – sandalone 2012-07-24 20:43:12

+0

嘗試在LogCat的幫助下找到繁重的任務。 – 2012-07-24 20:43:13

回答

2

還有什麼可以被視爲沉重的任務,應該在後臺線程中執行?

如果花費幾個毫秒以上,它應該在後臺線程中執行。

由Android 4.1的Project Butter提供,Android UI現在以60fps更新,這意味着有16ms的時間來完成渲染幀所需的所有工作。操作系統需要一些時間來做實際的渲染。如果你花費的時間超過幾毫秒,你可能會跳過一幀,導致「janky」行爲。即使在早期版本的Android上,也可以看到效果 - 這對Jelly Bean來說會更加震撼,因爲一切都更加平滑。

+0

你如何建議我測量每個組件的執行時間?任何sdk工具? – sandalone 2012-07-25 06:53:17

+1

@sandalone:您可以使用從簡單的'Log'語句到['TimingLogger'](http://developer.android.com/reference/android/util/TimingLogger.html)到[Traceview](http:// developer.android.com/tools/debugging/debugging-tracing.html) – CommonsWare 2012-07-25 10:44:38

3

系統不會拋出ANR,因爲它注意到你正在做一些它被歸類爲「重」的事情;它會產生ANR,因爲用戶界面沒有響應。使用調試語句(即Log.d()),您需要跟蹤應用程序的進度,並在出現錯誤時找出它正在執行的操作(或嘗試執行的操作)。例如,UI線程上的無限循環會產生一個ANR,但是(可能)沒有辦法將任意循環分類爲無限循環。

相關問題