簡體   English   中英

Android:維護全球應用程序狀態

[英]Android: Maintaining Global Application State

應用程序狀態的Android文檔:通常不需要子類Application。 在大多數情況下,靜態單例可以以更模塊化的方式提供相同的功能[即維護全局應用程序狀態]。 如果你的單例需要一個全局上下文(例如注冊廣播接收器),那么檢索它的函數可以給一個Context,它在第一次構造單例時在內部使用Context.getApplicationContext()。

我的請求是:您能解釋並提供實現上述維護全局狀態建議的代碼示例。

請注意,已經建議建議子類化Application: 如何在Android中聲明全局變量?

謝謝。

更正了StinePike關於ApplicationState中上下文的答案。 在發布的代碼中,傳遞給應用程序狀態的上下文保持在。 如果傳入的上下文是活動或類似單元,則活動將被泄露並防止被垃圾收集。

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;
    }
}

如果我沒有錯,你試圖保存全局變量而不擴展Application。 如果是這樣,你可以做兩件事

如果您不需要任何上下文,那么您只需使用具有此類靜態成員的類

public class ApplicationState {
    public static boolean get() {
        return b;
    }

    public static void set(boolean a) {
        b = a;
    }

    private static boolean b;
}

如果您需要上下文,但您不想擴展應用程序,則可以使用

Public class ApplicationState {
    private Context context;
    private static ApplicationState instance;

    private ApplicationState(Context context) {
        this.context = context;


    public static ApplicationState getInstance(Context context) {
        if (instance == null) {
            instance = new ApplicationState(context);
        }
        return instance;
    }

    public void someMethod(){}
}

所以你可以調用一些像這樣的ApplicationState.getInstance(context).somemethod();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM