2016-07-01 30 views
0

他のコードで参照されていない場合でも、(少なくともHandlerThreadで作成されたもの)はガベージコレクションされないようです。私はquit()quitSafely()メソッドを知っていますが、私のアプリケーションでは、これらのメソッドの呼び出しに誰が責任を負うかわかりません。Android Looperをシャットダウンする

複数のアクティビティを持つアプリケーションでLooperをシャットダウンする正しい方法は、このに作成されたHandlerにはアクティビティのライフサイクルと異なるライフサイクルがあります。いずれのアクティビティでもonDestroy()になることはできません。私はそれをシャットダウンしないで、プロセスはOSによって殺されない - 新しいLooperは、次のアプリの "起動"で作成され、この1つが漏れる。あるいは、一度作成して静的フィールドに格納し、決して終了しないで、一度漏れさせてください。最後のものはこれまでに実装するのが最も安全で簡単です。

複数のアクティビティを使用してアプリケーションにルーパーをシャットダウンするための正しい方法は何ですか

答えて

0

と、このルーパーに作成されたハンドラは

​​を使用して活動するものとは異なるライフサイクルを持っています。

独自のライフサイクルを持つLooperは、アクティビティのようにメインスレッドで動作することができます。

LocalBroadcastManagerを使用すると、コールバックを取得できます。

+0

'Looper'のライフタイムを管理するために' Service'を使用することをお勧めしますか?もしそうなら、私が前に言ったように、私はそれをいつシャットダウンするのかも知らない。この場合、「サービス」は私の静的フィールドとほぼ同じでなければなりません。あるいは、 'main'以外のスレッドで' Service'を使うことを提案しているなら、 'Handler'が' Message'をお互いに送ることに興味があります。 – justme

+0

サービスでは、「ルーパー」の生涯を扱う必要はありません。 'Service'生涯にバインドするだけで、システムがそれを管理できるようにすることができます。本当に 'Handler'を使いたいなら、[ResultReceiver](http://stackoverflow.com/questions/4510974/using-resultreceiver-in-android)を使ってServiceから' Message'sを処理することができます。 –

関連する問題