何らかの理由でアンドロイドOSが自分のasynctaskを遅延または中断する可能性がありますか?もしそうなら、私の仕事(例えば、データベースからデータを取り出す)が遅れたり中断されないようにするには、何ができるでしょうか。おそらくUIスレッド上で実行しますが、UIをフリーズさせて遅延を引き起こす可能性があるので、それは良い考えではないことを読んでいます。アンドロイドは私の非同期タスクを遅らせたり中断したりできますか?
答えて
それは、Android OSが何らかの理由で私のasynctaskを遅らせたり中断する可能性があります。
AsyncTask
の別のインスタンスによってブロックされている可能性があります。デフォルトでは、彼らは、単一のバックグラウンドスレッドで実行します。https://developer.android.com/reference/android/os/AsyncTask.html
ので、私は私の仕事は、(例えば、データベースからデータをフェッチする)ことを保証するために何ができるかが遅れたり、中断されていない場合。
正確に遅延を引き起こす原因を調査します。それはdoInBackground
メソッドの中にあるのでしょうか、あるいはバックグラウンド操作の前後に遅延が起こるかもしれません。コードをデバッグすることなく伝えるのは難しいことです。
UIスレッドで実行している可能性がありますが、UIがフリーズして遅延が発生する可能性があるため、これはお勧めできません。
この場合、AsyncTask
は良い解決策ではありませんが、正しく実装するとうまくいくはずです。考慮する他の方法はLoader
s、またはAsyncQueryHandler
とContentProvider
です。あなたのユースケースによって異なります。
ないとして、これはUは完全に右ではありませんいくつかのケースではUIをブロックすることがあり、AsyncTaskは店にオペレーションを実行するためにthreadPoolExecutorを使用し、シンプルなLinkedBlockingQueue (2 * C + 1)のスレッドの名前は「AsyncTask#」で指定され、AsyncTaskが完了した後ではなく、次のタスクまで待機します。 https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/AsyncTask.java#L208 – Inverce
ありがとうございます。あなたのリンクによれば、次の行があります:private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR; 。 'AsyncTask' *はthreadPoolExecutorを使うことができますが、デフォルトの動作はserialです。 –
@Inverce 'HONEYCOMBで始まって、並列実行によって引き起こされる共通のアプリケーションエラーを避けるために、タスクは単一のスレッド上で実行されます。 '[こちら](https://developer.android.com/reference/android/os/AsyncTask.html )。 – Enzokie
@Override protected void onPreExecute(){ holdWait = false; stop = false; }
@Override
protected Void doInBackground(Void... params) {
synchronized (this) {
while(true) {
if(Work) return null;
if(HaveWork) {
//make some
} else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
public void mynotify() {
synchronized (this) {
if(holdWait) {
notify();
holdWait = false;
}
}
}
public void setStopWork() {
synchronized (this) {
stop= false;
if(holdWait) {
notify();
holdWait = false;
}
}
}
}
あなたは私の質問を理解できなかったと思います。私はasynctaskへの参照を保持しておらず、再度実行しagaingしています。私はちょうど私のアプリが起動時に一度だけデータベースからデータをフェッチするasyctaskを実行します。私は –
@DayemSiddiquiはこれがあなたに – user1782565
@DayemSiddiquiを確認してくださいコードを更新した – user1782565
- 1. アンドロイド非同期タスク
- 2. RecyclerAdapterから非同期タスクを使用中にエラーが発生しました
- 3. アンドロイドで非同期タスクを待つ
- 4. 非同期タスクとは、C#、私は非同期Webサービスの呼び出しに取り組んでいます
- 5. jQueryを使用した遅延非同期タスク
- 6. アンドロイド:Runnableからの非同期タスク - 「アクティビティは元々ここに追加されたウィンドウをリークしました」
- 7. リストビューで遅延ロードまたは非同期タスクを使用する方法
- 8. Visual Basic非同期タスク代わりに同期タスク
- 9. Springタスク非同期と遅延
- 10. 非同期遅延読み込みタスク
- 11. タスクを使用した非同期プログラミング
- 12. Android MediaCodecは非同期モードでは同期モードよりも遅いですか?
- 13. 非同期タスクを実行中のANR
- 14. 非同期タスクdoInBackground()の実行中にエラーが発生しましたか?
- 15. 私はオーディオを再生したいです。スレッド、非同期タスク、またはサービスを使用しますか?
- 16. ボタンクリック中に非同期タスクを待つことはできますか?
- 17. 非同期タスク後のマージ中のエラー
- 18. 非同期タスクはGUIを更新できません
- 19. Xamarin IOSはcontoller非同期タスクを作成できません
- 20. 作り方シリアル化された非同期タスク
- 21. 非同期HttpHandlerの要求を例外なく中断できますか?
- 22. 非同期React.Componentは私のために働きません
- 23. 非同期タスクは私のスピナーをリセットします
- 24. 非同期タスク
- 25. 非同期タスク
- 26. TypeError:タスクが非同期の関数ではありませんjs parrallel
- 27. 非同期タスクからメッセージを表示
- 28. バックグラウンドワーカーから非同期タスクを待つ
- 29. 私のスクリプトとCSSから非同期を取り除き、延期する
- 30. ネストされた非同期タスクを同期する
どのような状況で、タスクを遅延または中断しますか? – Victory
私はデータベースからデータを取り出して、リストビューを作成しています。非同期タスクが完了したら、非同期タスクを使用してデータをフェッチし、arraylistに格納します。onPostExecute()関数のnotifyDataSetChanged()を呼び出して、リストビューアダプタを更新します。ほとんどの場合、リストはうまくロードされますが、いつかは遅延があります(空白の画面が表示されます)、しばらくしてからリストビューが更新されます。 –
データベースからフェッチするのに時間がかかっただけでなく、期待されていることをどのように確信していますか?ディスクioは遅くなる可能性があります。 – Victory