Androidの重いタスクは、バックグラウンドスレッドで実行する必要があります。重いタスクは次のとおりです。
- データベースタスク
- 画像、音声、動画を操作する
- インターネットデータの取得と解析
- いくつかの広範な計算(ほとんどのアプリでは非常にまれです)
他に重いタスクと見なすことができ、バックグラウンドスレッドで実行する必要があるものは何ですか?
ANRエラーが発生し、Androidがどのタスクを重いタスクとして解釈するかを知る必要があります。
Androidの重いタスクは、バックグラウンドスレッドで実行する必要があります。重いタスクは次のとおりです。
他に重いタスクと見なすことができ、バックグラウンドスレッドで実行する必要があるものは何ですか?
ANRエラーが発生し、Androidがどのタスクを重いタスクとして解釈するかを知る必要があります。
システムは、「重い」と分類された何かを実行していることに気付いたため、ANRをスローしません。ユーザーインターフェイスが応答しないため、ANRが生成されます。デバッグステートメント(つまり、Log.d())を使用して、アプリの進行状況を追跡し、エラーが発生したときにアプリが実行している(または実行しようとしている)ことを把握する必要があります。たとえば、UIスレッドの無限ループはANRを生成しますが、任意のループを無限ループかどうかに分類する方法は(おそらく)ありません。
他に重いタスクと見なすことができ、バックグラウンドスレッドで実行する必要があるものは何ですか?
数ミリ秒以上かかる場合は、バックグラウンドスレッドで実行する必要があります。
Android4.1のProjectButterの厚意により、AndroidUIは60fpsで更新されるようになりました。つまり、フレームのレンダリングに必要なすべての処理を16ミリ秒で実行できます。OSは、実際のレンダリングを行うためにその時間の一部を必要とします。数ミリ秒以上かかると、フレームをスキップして「ジャンキー」な動作を引き起こす可能性があります。以前のバージョンのAndroidでも、効果が見られます。他のすべてがよりスムーズであるため、JellyBeanではさらに不快感が増します。