任何人都可以启发我关于在Android中持有全球价值观的类的安全性吗?
以下是我的意思的简短例子:
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
,但我不确定是否应该这样做,以及我是否可以使用像这样的处理程序。
我到处读到Android应用程序可能随时被杀死,这是否意味着它被完全杀死或者只是其中的一部分,因此仅杀死我的Globals
课程?
或者是否存在以安全的方式存储全局可用数据的任何其他方式,而无需将每个成员更改写入数据库(事实上,我的User
类是 little 更复杂比这个例子。; - )
感谢您的努力!
编辑:好的,这就是我最终做的事情:
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
节点,告诉应用使用您的子类。
到目前为止一切正常,我可以通过调用Context
轻松访问当前SQLiteOpenHelper
(MyApp.getContext()
中的f.ex.)。
答案 0 :(得分:8)
最好使用Android Application
类。它旨在存储全局应用程序状态
http://developer.android.com/reference/android/app/Application.html
只需创建一个子类,并确保更新清单文件以使用您的版本。然后你可以存储你需要的任何东西。活动有一个方法getApplication()
,您可以将其投射到您的班级以访问您的实现
答案 1 :(得分:1)
不鼓励这种模式 - 在单元测试时会遇到问题。
您能解释一下如何对必须在此处提供不同自定义“用户”的类进行单元测试吗?您要么将模拟/假冒类强制转换为“用户”,这可能会对其他测试产生交叉影响,或者您在代码中添加了if(测试),这很快就会变得难看。
随着时间的推移,人工填充此类进行测试变得更加复杂,并开始建立关系和依赖关系。
更简单的是,它很难单独测试一个类。
这是其中一种模式,给定的程序员要么没有看到问题,要么从未使用过,因为他被烧了 - 你会看到很少的中间立场。