任何人都可以启发我一个在Android中持有全局值的类的安全性吗?是在Android中保存静态变量的“Globals”类吗?
这里是什么,我的意思是一个简单的例子:
public class Globals {
public static int someVariable = 0;
public static User currentUser = null;
public static Handler onLogin = null;
}
然后在某处的Activity
我做了以下内容:
Globals.someVariable = 42;
Globals.currentUser = new User("John", "Doe");
我在我的应用程序的多个地方为依托Globals.currentUser
一旦用户登录,但我不确定是否应该这样做,以及如果我可以使用像这样的Handler。
我在任何地方都能看到一个Android应用程序可能会被杀死,这是否意味着它完全被杀死或者可能只是它的一部分,从而只会导致我的Globals
类失效?
或者是有任何其他方式,存储在一个安全的方式在全球范围提供数据,而每一个成员的变化写入数据库(其实,我User
类比在这个例子中一点更加复杂。;-)
感谢您的努力!
编辑:好了,这里就是我终于做到:
public class MyApp extends Application {
private static MyApp _instance;
public MyApp() {
super();
_instance = this;
}
public static MyApp getContext() {
return _instance;
}
....
private User _user = null;
public User getUser() {
if (_user == null) _user = new User();
return _user;
}
}
然后修改AndroidManifest.xml
并添加android:name=".MyApp"
您application
节点告诉应用程序使用您的子类。
到目前为止一切正常,我可以通过调用MyApp.getContext()
轻松地访问当前Context
(f.ex.在SQLiteOpenHelper
)。
可能的重复[是Android中的静态安全?](http://stackoverflow.com/questions/1203434/is-the-static-safe-in-android) –
@ z00l我不知道你的第二种方法比第一种更好。如果你更容易维护你的代码库,那很好。但是,Android并不会因为应用程序被终止而终止(垃圾回收)全局静态变量(并可能使用相同的活动堆栈重新启动)。请记住,Java是Java,Android是Android。 Android的应用程序管理不一定与Java的全局静态变量的内存分配相同。 –