ご提案のとおり、行数は膨大です。AsyncTask
は使用しないことをお勧めします。 、アクティビティのライフサイクルに関連付けられていないため、つまり、アクティビティを開始したアクティビティが停止した場合、AsyncTask
を意味するわけではありません。 同様に停止するため、AsyncTaskを開始しようとした場合、および別のAsyncTask
を再起動したときに、画面の回転や戻るキーが押されたなどのアクティビティが停止した場合 すでに実行されているAsyncTask
にリンクされるのではなく、生成されます 。したがって、同じ操作を複製します。
したがって、全体として、次のアプローチをお勧めします
(A)
-
IntentService
を作成します 、handleIntent()
apiはすでにワーカースレッドで実行されているため、何も心配する必要はありません。キュー内のすべてのメッセージが終了すると、APIは自動的に停止するため、リソースのリークについてはまったく心配しません。 -
行を一括で挿入するためのロジックを記述し、同じためにコンテンツリゾルバーbulkInsert()APIを使用します。バッチごとに100roesで挿入することをお勧めします。ロールバックとエラーチェックを実装して、挿入が正常に行われることを確認できます。
-
すべての挿入が完了したら、ハンドラーとメッセンジャーを使用してUIにポストバックできます。
これらすべてで、2つの大きな課題を達成できます
- UIをハングアップせず、可能なANRを回避します
- 戻るキーが押された場合でも、バックグラウンドタスクで実行されたときにdb操作がスムーズに実行されるようにします。