自分のアクティビティでワーカースレッドを実行しています。アクティビティを終了するとき(onPause()など)、このスレッドにメッセージを送信しています。何か問題が起きない限り、すぐに(ミリ秒後に)終了する必要があります。 通常、onPause()でjoin()を使用しますが、この場合、このスレッドはシャットダウンシーケンスを実行するためにUIスレッドを使用する必要があります(アクセサリファイル記述子を閉じることは、 )。 UIスレッドをブロックしようとすると、デッドロックが発生します。私は何とかスレッドが終了するまで、アプリケーションの終了を延期するソリューションを探しています。 おそらく、このような場合に終了を中止することができれば、後でfinish()を手動で呼び出すことができますが、この(中止)を実行できるかどうかはわかりません。Androidアクティビティをブロックしてクリーンアップが終了するまでブロックします。
スレッドが最終的にクリーンアップと終了を完了すると仮定すると、非常に安全でないように見えます。
アプリケーションの終了後にクリーンアップを実行することは問題ではありません。問題は、クリーンアップが完了するまでアプリケーション終了を延期することです。 – Ytai
私の編集内容を確認してください。 –
について(3):onBackPressed()は、アプリケーションが終了する唯一の状況ではありません。すべての可能な出口経路をカバーしようとする試みは、非常に信頼性が低く、持ち運びができず、将来的には不可能である。 AsyncTaskについては、これはまったく必要ありません。通常、クリーンアップにはミリ秒かかります。私はちょうどそれがハングアップし、アプリケーションが前の実行を完全にクリーンアップする前に再起動しないことを確認するチャンスをキャッチしたい。 – Ytai