Android 在活动之间共享全局变量的最佳实践
对于如何在一个被认为是安全的android项目中的活动之间共享全局变量,我有点困惑 这样做的最佳实践是什么?扩展应用程序类还是创建自定义单例类 感谢您的帮助,提前谢谢 这样做的最佳实践是什么?扩展应用程序类或 创建一个自定义的单例类Android 在活动之间共享全局变量的最佳实践,android,Android,对于如何在一个被认为是安全的android项目中的活动之间共享全局变量,我有点困惑 这样做的最佳实践是什么?扩展应用程序类还是创建自定义单例类 感谢您的帮助,提前谢谢 这样做的最佳实践是什么?扩展应用程序类或 创建一个自定义的单例类 仔细考虑这些变量是否真的是全局变量,它们是否必须在活动之间共享 如果第一个问题的答案是“是”,那么最好将它们存储在应用程序中 您也可以实现一个单例,但是1)测试稍微困难一些,b)如果您的全局变量需要上下文,然后,应用程序实例将是最合适的。在应用程序类中存储某些内容的
应用程序中
您也可以实现一个单例,但是1)测试稍微困难一些,b)如果您的全局变量需要
上下文
,然后,应用程序实例将是最合适的。在应用程序类中存储某些内容的问题是,您不能指望从应用程序对象的同一实例恢复活动。例如,可以暂停某个活动,终止应用程序(由于内存原因)以及对实例中的对象所做的任何更改,然后使用新的应用程序实例恢复该活动
下面是一篇非常好的博客文章,解释了存储在应用程序类中的数据是如何丢失的:
我不确定这是否是“最佳”做法,但我认为这是一个很好的解决方案
我有一个PersistData类,用于保存应用程序范围的“全局”。我使用Dagger将这个单例的实例注入到任何需要这些变量的类中
它的基本过程是:
当我通过以下方式将值保存在此对象中时:
mPersistData.saveEmailId("me@example.com");
public class PersistData {
private String email;
public PersistData(MyApp app) {
mApp = app;
email = readEmailId();
}
public void saveEmailId(String emailToSave) {
writeEmailId(emailToSave);
email = emailToSave;
}
private void writeEmailId(String emailId) {
generalSettingsFileEditor.putString("USER_ID", emailId);
generalSettingsFileEditor.commit();
}
public String readEmailId() {
String emaiId = generalSettingsFile.getString("USER_ID","");
return(emaiId);
}
public String getEmail() {
return email;
}
}
在我的应用程序匕首模块中,我有:
@Provides @Singleton
public PersistData providePersistData () {
System.out.println(String.format("mApp = %s", mApp));
return new PersistData(mApp);
}
然后,每当我需要访问这些变量中的任何一个时,我都会按如下方式注入singleton:
public class HomePresenter {
@Inject
PersistData mPersistData;
...
mPersistData.saveEmailId("me@example.com");
myEmail = mPersistData.getEmailId();
...
}
你能解释一下你到底想达到什么目的或者解决什么问题吗?使用
Application
class