自分のユーティリティクラスで必要な関数を呼び出すためのコンテキストを提供する方法
-
08-10-2019 - |
質問
時々、特定の関数を呼び出すためにコンテキストオブジェクトを提供する必要があります。
Intent intent = new Intent(context, MyClass.class);
サービスを開始するため
context.startService(intent);
または、クエリを実行するコンテキストオブジェクトを提供します
Cursor cursor = context.managedQuery(uri, projection, null, null, null);
これがアクティビティを拡張するUIクラスで行われた場合、それは問題ありません。ただし、何も拡張せず、これらの関数を呼び出す独自のユーティリティクラス(シングルトン)を作成したい場合、必要なコンテキストオブジェクトはありません。ここで、私の回避策は、ユーティリティクラスを初期化しながらアクティビティ参照を渡し、それらの関数を呼び出すための参照を持つことです。私はそれをするための正しい方法は何だろうと思っています。それらの関数を呼び出すことができるように、すべてのクラスがコンテキストを拡張するようにすることは合理的ではありません。
解決
拡張を検討することもできます Application
シングルトンを初期化します onCreate
- 通常のオブジェクトとしてメトッド。その後、にアクセスできます Application
- 使用を使用するアクティビティ内のオブジェクト getApplication
. Application
また、アプリケーションコンテキストへのアクセスを提供するため、アクティビティ内でそれについて心配する必要はありません。
そうすれば、すべての共有アプリケーション状態が単一の場所に集中しているため、静的イニシャルアイザーをいじる必要はありません。
他のヒント
ここで、私の回避策は、ユーティリティクラスを初期化しながらアクティビティ参照を渡し、それらの関数を呼び出すための参照を持つことです。私はそれをするための正しい方法は何だろうと思っています。
絶対違う。あなたはそれを静的な参照を保持することにより、その活動の記憶を漏らしています。
ユーティリティクラスのメソッドを使用してください Context
パラメーターとして。または、使用します getApplicationContext()
Singletonアプリケーションのコンテキストを取得し、それをユーティリティクラスコンストラクターに提供します。アプリケーションコンテキストオブジェクトは、プロセスがそうである限り生き続けます。