他のコードで参照されていない場合でも、(少なくともHandlerThread
で作成されたもの)はガベージコレクションされないようです。私はquit()
とquitSafely()
メソッドを知っていますが、私のアプリケーションでは、これらのメソッドの呼び出しに誰が責任を負うかわかりません。Android Looperをシャットダウンする
複数のアクティビティを持つアプリケーションでLooper
をシャットダウンする正しい方法は、このに作成されたHandler
にはアクティビティのライフサイクルと異なるライフサイクルがあります。いずれのアクティビティでもonDestroy()
になることはできません。私はそれをシャットダウンしないで、プロセスはOSによって殺されない - 新しいLooper
は、次のアプリの "起動"で作成され、この1つが漏れる。あるいは、一度作成して静的フィールドに格納し、決して終了しないで、一度漏れさせてください。最後のものはこれまでに実装するのが最も安全で簡単です。
'Looper'のライフタイムを管理するために' Service'を使用することをお勧めしますか?もしそうなら、私が前に言ったように、私はそれをいつシャットダウンするのかも知らない。この場合、「サービス」は私の静的フィールドとほぼ同じでなければなりません。あるいは、 'main'以外のスレッドで' Service'を使うことを提案しているなら、 'Handler'が' Message'をお互いに送ることに興味があります。 – justme
サービスでは、「ルーパー」の生涯を扱う必要はありません。 'Service'生涯にバインドするだけで、システムがそれを管理できるようにすることができます。本当に 'Handler'を使いたいなら、[ResultReceiver](http://stackoverflow.com/questions/4510974/using-resultreceiver-in-android)を使ってServiceから' Message'sを処理することができます。 –