私の downloadFile AsyncTask は、2g ネットワークを介した同時ダウンロードの場合、かなりの時間を必要とする場合があります。私はそれが殺されているのではないかと疑っていますが、よくわかりません。
私の質問は: asynctask のタイムアウトとは何ですか? Android が私のタスクを強制終了したときに呼び出される関数は何ですか? 例外がスローされた場合、どこでキャッチしますか?
私の downloadFile AsyncTask は、2g ネットワークを介した同時ダウンロードの場合、かなりの時間を必要とする場合があります。私はそれが殺されているのではないかと疑っていますが、よくわかりません。
私の質問は: asynctask のタイムアウトとは何ですか? Android が私のタスクを強制終了したときに呼び出される関数は何ですか? 例外がスローされた場合、どこでキャッチしますか?
Android はあなたのタスクを殺すべきではありません。AsyncTask はまさに非同期であるため、Android は ANR をスローしません。
doInBackground 内で例外をテストする場合は、コードを関連する try catch ブロックでラップし、例外が発生した場合は例外をスローまたは処理します。
AsyncTask をキャンセルすることはできますが、タスク内で適切な間隔でisCancelled
フラグを確認する必要があります。
タスクをキャンセルすると、onPostExecute()
は呼び出されません。
もちろん、さらに読むことができます:http://developer.android.com/reference/android/os/AsyncTask.html
追加: おそらく重要なのは、Android Ice Cream Sandwich とおそらく Honeycomb がデフォルトとしてスレッド プールの実行から移行し、代わりにシリアル化されたアプローチを使用していることです。ICS でタスクが実行されていないように見える場合、または長時間待機した後に実行された場合は、パラメーターを使用して実行しexecuteOnExecutor()
、渡す必要がありTHREAD_POOL_EXECUTOR
ます。詳細については、上記のリンクを参照してください。