3

次のような特定の関数を呼び出すために、Context オブジェクトを提供する必要がある場合があります。

Intent intent = new Intent(context, MyClass.class);

サービスを開始するために

context.startService(intent);

または、クエリを実行するための Context オブジェクトを提供します

Cursor cursor = context.managedQuery(uri, projection, null, null, null);

これが Activity を拡張する UI クラスで行われる場合は問題ありません。ただし、何も拡張せずにこれらの関数を呼び出す独自のユーティリティ クラス (シングルトン) を作成する場合、必要な Context オブジェクトがありません。私の回避策は、ユーティリティ クラスの初期化中にアクティビティ参照を渡し、その参照を使用してそれらの関数を呼び出すことです。私はそれを行う正しい方法は何だろうと思っています。すべてのクラスで Context を拡張して、これらの関数を呼び出せるようにすることは合理的ではありません。

4

2 に答える 2

8

私の回避策は、ユーティリティ クラスの初期化中にアクティビティ参照を渡し、その参照を使用してそれらの関数を呼び出すことです。私はそれを行う正しい方法は何だろうと思っています。

絶対違う。アクティビティへの静的参照を保持することで、そのアクティビティのメモリをリークしています。

ユーティリティ クラスのメソッドがContextパラメータとして を受け取るようにします。または、getApplicationContext()シングルトン アプリケーション コンテキストを取得し、それをユーティリティ クラス コンストラクターに提供するために使用します。アプリケーション コンテキスト オブジェクトは、プロセスが存続する限り存続します。

于 2010-11-11T20:13:37.077 に答える
5

-MethodApplicationでシングルトンを通常のオブジェクトとして拡張および初期化することも検討してください。その後、を使用してアクティビティ内の -Object にonCreateアクセスできます。また、アプリケーション コンテキストへのアクセスも提供するため、アクティビティ内でそれについて心配する必要はありません。ApplicationgetApplicationApplication

そうすれば、共有アプリケーションの状態はすべて 1 か所に集中し、静的イニシャライザをいじる必要がなくなります。

于 2010-11-11T20:21:40.433 に答える