シングルトンなどでBroadCastReceiverを使用する最も滑らかな方法
-
03-10-2019 - |
質問
アプリケーションのユーザーに関する慎重な情報を保管するシングルトンがあります。現時点では、ユーザーのログインとユーザーの場所を保存しています。
1)場所はサービスを介して見つかります。現時点では、サービスは私のシングルトンを直接参照して、経度と緯度を詰め込みます。代わりに、シングルトンが聞いて使用する放送を送信するために、Broadcastreceiverを使用したいと思います。
ただし、Broadcastreceiverを登録するには、Singletonにコンテキストが必要です。私が望んでいることを達成するための最も滑らかな方法は何ですか。 BroadCastReceiverはおそらく適切なオブジェクトではありませんか?
2)また、シングルトンを使用することでどのような問題を検討していますか? Androidは、いつでもこのメモリを取り戻す可能性があると思います(明らかに悪いでしょう)。では、どうすればそれを防ぐことができますか?アプリケーションのコンテキストを渡して、メンバー変数に保存することはこれを阻止しますか?
Androidのドキュメントには次のように述べています。「しかし、静的のライフサイクルはあなたの制御の下ではあまりありません。したがって、ライフサイクルモデルを順守するために、アプリケーションクラスはOnCreate()およびOnterminateでこれらの静的オブジェクトを開始して取り壊す必要があります() )アプリケーションクラスの方法「しかし、これを達成する方法は完全にはわかりません。
解決
ただし、Broadcastreceiverを登録するには、Singletonにコンテキストが必要です。私が望んでいることを達成するための最も滑らかな方法は何ですか。 BroadCastReceiverはおそらく適切な>オブジェクトではありませんか?
「最も滑らかな方法」は、あなたがしていることをしないことです。登録するだけです BroadcastReceiver
から Activity
, Service
, 、 また 多分 an Application
. 。君 しなければならない これを解除します BroadcastReceiver
いつ Activity
, Service
, 、 また Application
破壊されます。
Androidは、いつでもこのメモリを取り戻す可能性があると思います(明らかに悪いでしょう)。では、どうすればそれを防ぐことができますか?
あなたはそうしない。 Androidは、いつでもプロセスを終了する権利を留保します(たとえば、メモリを取り戻す)。 Android 2.1および以前のタスクキラーは、いつでもプロセスを終了します。アプリケーションのすべてのコンポーネントが破壊されると、Androidはいつでもプロセスをリサイクルでき、同時にヒープをクリアすることができます。等々。
負けても構わないものだけを記憶に入れてください。
「アプリケーション」をモノリシックなエンティティとしてではなく、ゆるく結合したコンポーネントのバスケットと考えるのが最善です。
アプリケーションのコンテキストを渡して、メンバー変数に保存することはこれを阻止しますか?
いいえ。
Androidのドキュメントには次のように述べています。「しかし、静的のライフサイクルはあなたの制御の下ではあまりありません。したがって、ライフサイクルモデルを順守するために、アプリケーションクラスはOnCreate()およびOnterminateでこれらの静的オブジェクトを開始して取り壊す必要があります() )アプリケーションクラスの方法「しかし、これを達成する方法は完全にはわかりません。
のサブクラスを作成します Application
そして、Androidがそれを使用する必要があることをマニフェストで示します android:name
の属性 <application>
エレメント。