DB読み取りなどの長い操作を行うためにasynctaskを使用しています。すべての非同期タスクが完了したら、新しいアクティビティを開始してそのコンテンツをレンダリングしたいと考えています。これを達成するための最良の方法は何ですか?
onPostExecute を使用して画面を更新することは知っています。しかし、すべてのayncTasksが完了しない限り、画面を更新したくありません
助けてくださいありがとう
DB読み取りなどの長い操作を行うためにasynctaskを使用しています。すべての非同期タスクが完了したら、新しいアクティビティを開始してそのコンテンツをレンダリングしたいと考えています。これを達成するための最良の方法は何ですか?
onPostExecute を使用して画面を更新することは知っています。しかし、すべてのayncTasksが完了しない限り、画面を更新したくありません
助けてくださいありがとう
複雑にしすぎないでください: ごとにインクリメントされるカウンターを使用してくださいonPostExecute
。タスクは、このカウンターが最大 (作成したタスクの数に等しい) であることを検出すると、更新コードを実行できます。
onPostExecute
UI スレッドで実行されるため、このカウンターをロックする必要はありません。
単なる提案です。Asynctask の数に合わせたサイズのブール値の配列を作成できます。各 Asynctask には、ブール配列のインデックスである ID があります。onPostExecute またはその他のコールバックで、すべてのエントリが true かどうかを確認できます。その後、すべてが完了したことがわかります。もう 1 つの方法は、Asynctask のそれぞれに一意の ID を割り当て、それらの ID の合計も取得します。そのうちの 1 つが完了すると、合計からその ID を差し引き、それがゼロに達すると、その ID もわかります。すべて完了です。完璧ではありません。いくつかの提案です。