我一直在研究为我的Android应用程序存储全局设置的方法,到目前为止,最好的方法似乎是扩展Application类并将共享数据存储在其中,如here所述。我发现不是使用(CustomApplicationClass)getApplicationContext().getSomething()
我可以通过直接引用类中的静态方法来做同样的事情:CustomApplicationClass.getSomething()
并且两种方式都可以正常工作。
这是CustomApplicationClass的一篇文章:
public class CustomApplicationClass extends Application {
private static boolean something;
@Override
public void onCreate() {
[...]
}
public static boolean isSomething() {
return something;
}
public static void setSomething(boolean something) {
this.something = something;
}
}
现在,如果我想在我的代码中的某处检索“something”变量的值,比如说,从我的应用程序Activity中检索,那么它们之间是否有区别:
boolean var1 = ((CustomApplicationClass)getApplicationContext()).isSomething();
和
boolean var1 = CustomApplicationClass.isSomething();
?运行应用程序时,两者都可以正常工作。第二种方式是安全使用,还是不可取的?
答案 0 :(得分:1)
我一直在研究如何为我的Android应用程序存储全局设置,到目前为止,最好的方法似乎是扩展Application类并将共享数据存储在其中,如此处所述。
除非您没有这样做。
我发现不是使用(CustomApplicationClass)getApplicationContext()。getSomething()我可以通过直接引用类中的静态方法来做同样的事情:CustomApplicationClass.getSomething()并且两种方式都可以正常工作细
当然。您可以轻松地CustomApplicationClass
扩展Object
,然后执行CustomApplicationClass.getSomething()
。当前的方法与仅使用Java中的普通单例模式相比,您没有获得任何好处,并且您正在失去灵活性,因为应用程序只能有一个Application
的自定义子类。
第二种方式是安全的,还是不可取的?
第一种方法毫无意义,因为您的数据成员和方法是静态的。
或者:
将CustomApplicationClass
而非中的内容设为static
,然后使用getApplicationContext()
。
重构CustomApplicationClass
以不扩展Application
,然后使用静态数据成员和/或访问器方法,或更正式地切换到the Java singleton pattern。
就个人而言,我会选择#2选项。
答案 1 :(得分:0)
如果你检查android.app.Application(http://developer.android.com/reference/android/app/Application.html)的api,你会发现类概述如下:
需要维护全局应用程序状态的基类。您可以通过在AndroidManifest.xml的标记中指定其名称来提供自己的实现,这将导致在创建应用程序/包的过程时为您实例化该类。
通常不需要子类Application。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单例需要全局上下文(例如注册广播接收器),则可以为内部使用的Context提供检索它的函数。 Context.getApplicationContext()在第一次构造单例时。