4

アプリケーションの状態に関する Android ドキュメント: 通常、アプリケーションをサブクラス化する必要はありません。ほとんどの場合、静的シングルトンは同じ機能 (つまり、グローバルなアプリケーションの状態を維持する) をよりモジュール化された方法で提供できます。シングルトンにグローバル コンテキストが必要な場合 (ブロードキャスト レシーバーを登録する場合など)、それを取得する関数に、シングルトンを最初に構築するときに Context.getApplicationContext() を内部的に使用する Context を指定できます。

私の要求は次のとおりです。説明して、グローバル状態を維持するための上記の提案を実装するコード サンプルを提供してください。

アプリケーションのサブクラス化を推奨する提案が既にあることに注意してください: Android でグローバル変数を宣言する方法は?

ありがとうございました。

4

2 に答える 2

7

ApplicationState のコンテキストに関する StinePike の回答を修正しました。投稿されたコードでは、アプリケーションの状態に渡されたコンテキストが保持されます。渡されたコンテキストがアクティビティまたは同様のユニットである場合、アクティビティはリークされ、ガベージ コレクションが防止されます。

Application クラスの AndroidドキュメントContext.getApplicationContext()には、「最初にシングルトンを構築するときに内部的に使用する」必要があると記載されています。

public class ApplicationState {
    private Context applicationContext;
    private static ApplicationState instance;

    private ApplicationState(Context context) {
        this.applicationContext = context.getApplicationContext();
    }

    public static ApplicationState getInstance(Context context) {
        if(instance == null) {
            instance = new ApplicationState(context);
        }
        return instance;
    }
}
于 2013-10-18T19:00:07.803 に答える