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

Hal*_*ukO 3 android state global

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

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

请注意,已经建议建议子类化Application: 如何在Android中声明全局变量?

谢谢.

Rya*_*mas 7

更正了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;
    }
}
Run Code Online (Sandbox Code Playgroud)


sti*_*ike 5

如果我没有错,你试图保存全局变量而不扩展Application.如果是这样,你可以做两件事

如果您不需要任何上下文,那么您只需使用具有此类静态成员的类

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

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

    private static boolean b;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要上下文,但您不想扩展应用程序,则可以使用

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(){}
}
Run Code Online (Sandbox Code Playgroud)

所以你可以调用这样的方法 ApplicationState.getInstance(context).somemethod();