应用程序状态的Android文档: 通常不需要子类Application。在大多数情况下,静态单例可以提供相同的功能[即以更模块化的方式维护全局应用程序状态。如果你的单例需要一个全局上下文(例如注册广播接收器),那么检索它的函数可以给一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext()。
我的请求是:您能否解释并提供实现上述维护全局状态建议的代码示例。
请注意,已经有建议继承应用程序的子类: How to declare global variables in Android?
谢谢。
答案 0 :(得分:7)
更正StinePike关于ApplicationState中上下文的答案。在发布的代码中,传递给应用程序状态的上下文保持在。如果传入的上下文是活动或类似单元,则活动将被泄露并防止被垃圾收集。
Application类的android documentation声明你应该在第一次构造单例时“在内部使用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;
}
}
答案 1 :(得分:5)
如果我没有错,你试图在不扩展应用程序的情况下保存全局变量。如果是这样,你可以做两件事
如果您不需要任何上下文,那么您只需使用具有此静态成员的类
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();