私のアプリは単一のActivity
. このアクティビティでは、HandlerThread
ソケット ブロック操作を行うためにループで実行される複数の を作成しています。
HandlerThread
現在、私はこれらのすべての人に終了メッセージを投稿していActivity.onDestroy()
ます.
アプリを開いて閉じて再起動すると、クラッシュすることがあります (多くの場合、実行されていないハンドラー スレッドにメッセージを投稿するためです)。
私の質問は次のとおりです。アプリを閉じるときの正しい終了方法は何ですか? HandlerThread
(これらのスレッドがソケット操作をブロックしている可能性があることに注意してください)。
編集: 詳細: onCreate で開始されるハンドラー スレッドのプールがあります (初めてアプリを起動するときは問題ありません)。
各ハンドラの実行可能なループは、
if (shouldRun) {
//body
}
else {
close();
}
声明。
close メソッドは、保留中のすべてのメッセージとランナブルを削除し、メッセージをハンドラーに投稿して、ハンドラーにそのlooper.quit()
. このように、現在のハンドラー スレッドが IO 操作によってブロックされている場合、一度だけ終了すると、彼は quit() を実行します。