Android:维护全球应用程序状态

时间:2013-05-17 03:38:05

标签: android global state

应用程序状态的Android文档: 通常不需要子类Application。在大多数情况下,静态单例可以提供相同的功能[即以更模块化的方式维护全局应用程序状态。如果你的单例需要一个全局上下文(例如注册广播接收器),那么检索它的函数可以给一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext()。

我的请求是:您能否解释并提供实现上述维护全局状态建议的代码示例。

请注意,已经有建议继承应用程序的子类: How to declare global variables in Android?

谢谢。

2 个答案:

答案 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();