SyncAdapteronPerformSync中にAsyncTaskを正しく使用する方法
-
29-10-2019 - |
質問
ユーザーから、次のような強制終了ダイアログから報告されたバグレポートを多数受け取っています。 ジェネラコディセタグプレ
今、私はこの問題を最もよく解決する方法を見つけようとしています。onPerformSync実装内で、いくつかのAsyncTaskを作成して実行しています。私の問題は、onPerformSyncから戻る前にこれらのタスクが完了するのを待っていないことだと思います。私は次のことを試みました: ジェネラコディセタグプレ
次に、カウンターを設定し、そのカウンターがゼロに減少したら、非同期タスクからのコールバック内でLooper.myLooper()。quit()を呼び出します。
しかし、これを行うと、次のランタイムエラーでアプリケーションがさらに激しくクラッシュします: ジェネラコディセタグプレ
同期を正しく実行する方法はありますか?
解決
この投稿が古いことは知っていますが、このスレッドに出くわした他の人にとっては、メインスレッドでlooper.quit()を呼び出さないのはどうですか?以下は、いくつかのAsyncTasksを生成するSyncAdpaterサービスから私のために機能しますが、パフォーマンスの観点からこれを行わない他の理由があるかもしれません... ジェネラコディセタグプレ
他のヒント
実際にはできません。AsyncTaskはメインUIスレッドを使用し、そこでは使用できないハンドラーとルーパーに依存します。純粋なスレッド実装を使用します。AsyncTaskはアクティビティでのみ使用する必要があります。
ablocの応答で問題は解決しますが、この解決策の問題はUIがフリーズすることです。この問題は、Android2.2とAndroid2.3に存在します。私が見つけたトリックは、クラスSyncAdapter
でAsyncTaskのコンストラクターを呼び出し、Looper.prepare()
を使用することでした:
ジェネラコディセタグプレ