0

ユーザーが MainActivity を閉じると、サービスのバインドを解除します。その場合、サービスの onDestroy が呼び出されます。なので使い続けることはありません。

この場合、次の考えについてどう思いますか。

サービスで stopForeground(true) を呼び出すことはできませんか? 重要なことは何もしていないので、ほんの少しの RAM しか必要としません。その後、ユーザーが (サービスを必要とする何かを作成するために) MainActivity を再度開くと、startForeground() を再度呼び出すことができます。これは良い考えではありませんか?そうでない場合、なぜですか?

他の可能性は、サービスを保持していた以前の変数を null にすることです (onDestroy が呼び出されました)。その後、サービスを完全に再作成します。

どう思いますか?

4

1 に答える 1

4

大事なことをしていないので

それなら存在しなくてもいいので、バインド解除後に破棄してください。

少しRAMが必要です

あなたが「少し」と思うことと、ユーザー「少し」と思うことは同じではないかもしれません。また、ステータスバーにアイコンを配置します。さらに、プロセスがフォアグラウンド優先で実行され、ユーザーによる「実際の」フォアグラウンド アプリの使用に影響を与える可能性があります。

これは良い考えではありませんか?

いいえ、それは良い考えではありません。

そうでない場合、なぜですか?

ユーザーを悩ませるだけでなく、何の問題も解決しません。

サービスが何らかのデータを保持していた場合、そのデータをファイルやデータベースなどの永続ストアに保存する必要があります。プロセスは、サービスが実行されているかどうかに関係なく、ユーザーまたは OS によっていつでも終了できます。

他の可能性は、サービスを保持していた以前の変数を null にすることです (onDestroy が呼び出されました)。

「サービスを保持していた以前の変数」があってはなりません。Serviceあらゆる種類の「変数」にa を保持する必要はありません。そして、あなたが話しているのはJavaプログラマーが「静的データメンバー」と呼んでいるものだと思うので、静的データメンバーで「サービス*」のような一時的なものを保持したくないことは間違いContextありません。メモリーリーク。

于 2013-07-05T14:21:47.550 に答える