[英]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.