2017-01-02 17 views
0

Androidアプリケーションのバックグラウンド作業は、順次プロセス(つまり、BlockingQueueでコマンドをリッスンするスレッド)を通信することによって行われます。アンドロイドonPause:なぜ、すべてのスレッドを停止しますか?

スレッド/役者はMainApplicationに初期化されます。 BlockingQueue上のいくつかのコマンドがonResumeが呼び出される前に到着することができ、たとえばActivity.onPause中にこれらのスレッドを停止

は、いくつかの合併症をもたらします。

質問1:の間にこれらのスレッドを停止するのはどうしてですか?彼らはどんな仕事をしていない、ブロックされた状態になっているので、彼らは任意のパフォーマンスへの影響を持つべきではありません。

質問2:、次にonDestroyが呼び出されたとき、これらのスレッドには何が起こっていますか? ARTはそれらを殺すでしょうか? .interrupt()?タイムアウトはありますか?

+0

*作業がないかどうかを確認していませんか? –

+0

スレッドが待機状態になっています。 –

答えて

2
  1. あなたの質問は意見に基づいていますが、それらを停止するとパフォーマンスが低下する可能性があります。ユーザインタフェースは、(onStop後に)ユーザーに表示されていない場合に親指の一般的なルールとして、あなたはすべての作業を停止する必要があります。待機状態にしておけば十分です。

  2. onDestoryあなたのVMインスタンス(またはプロセス)ではないActivityインスタンスのみが「破棄されます」。ガベージコレクションされていない他のシングルトンオブジェクトやオブジェクトは、バックグラウンドスレッドを含めて存続します。

+0

それは私のMainApplicationを破壊しない、またはそれはありませんか?スレッドはそこから開始されます。 –

+0

いいえ、ありません。しかし、あなたのアプリがアクティブなコンポーネント(Activity、BroadcastReceiver、Serviceなど)を持たなくなるとすぐに、AndroidはRAMメモリをクリーンアップするための警告なしにあなたのアプリケーション/プロセスを完全に終了させ、他のアプリが使用できるようになることを理解する必要があります。極端な場合(低メモリデバイス)、最終的にスレッドが停止する可能性があります。 –

関連する問題