2
A
回答
0
这样做的最佳做法是什么?扩展应用程序类或 使自定义单例类?
- 三思而后这些变量是否是真正的全球和他们要活动之间共享。
- 如果第一个问题的答案是'是',那么最好的地方是将它们存储在
Application
中。
您可以实现单过,但1)它稍微难以测试和b)如果你的全局变量需要Context
,然后再次Application
例如将适合最好。
3
在应用程序类中存储某些内容的问题是,您无法依赖于应用程序对象的同一实例中正在恢复的活动。例如,一个活动可以暂停,应用程序被杀死(由于内存)以及您在实例中对对象进行的任何更改,然后该活动将恢复为新的应用程序实例。
这是一个非常好的博客文章,解释存储在应用程序级的数据如何可能会丢失: http://www.developerphil.com/dont-store-data-in-the-application-object
我不知道这是非常“最佳”的做法,但我认为这是一个很好的解决方案
我有一个PersistData类保存应用程序范围的“全局”。我使用Dagger将这个单例的实例注入任何需要这些变量的类。
的基本过程是这样的:
当我通过像保存在这个对象的值:
mPersistData.saveEmailId("[email protected]");
- 我第一次写在SharedPreferences条目
- 我然后保存它到一个成员变量
在该类的构造函数中,我初始化通过从SharedPreferences中读取成员变量。 这种方式读取的变量是“缓存”的,即它们不需要从SharedPreferences读取,并且如果应用程序被终止并重新启动,则成员变量具有正确的值。如果你只是在应用程序类中保存这些值,那么当应用程序重新启动时,成员变量将是无效的(不是你期望的甚至为空)。
下面是一个例子:
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);
}
然后,每当我需要访问这些变量我注入单身为这样的:
public class HomePresenter {
@Inject
PersistData mPersistData;
...
mPersistData.saveEmailId("[email protected]");
myEmail = mPersistData.getEmailId();
...
}
相关问题
- 1. 在活动之间共享httpClient实例的最佳方式?
- 2. 在ASP.NET和Silverlight 2之间共享DAL的最佳实践
- 3. 在多个表格之间共享关系的最佳实践
- 4. 在项目之间共享类的最佳实践
- 5. 在类之间共享LDAP连接 - 最佳实践?
- 6. 全球变量的Python最佳实践
- 7. Rails全局变量:是http请求之间的全局变量共享吗?
- 8. 在backbone.js中使用全局变量..最佳实践
- 9. PHP全球变量或最佳实践
- 10. 共享的NSDateFormatter - 最佳实践?
- 11. 共享的元素,最佳实践
- 12. 在Python中的类之间共享全局变量
- 13. 如何在导入的模块之间共享全局变量?
- 14. clojure全局变量的最佳实践(参考vs alter-var-root)?
- 15. 对象中全局变量的最佳实践-php
- 16. React.js中全局变量声明的最佳实践是什么?
- 17. 在多个Thor任务上共享全局数据的最佳实践
- 18. 最好的/你在Python中的实践共享全局变量,共享函数和类
- 19. 在类之间共享Java变量的最佳方式
- 20. 在.c文件之间共享全局变量
- 21. 在Lua车道之间共享一个全局变量
- 22. 在两个进程之间共享全局变量
- 23. 在两个项目之间共享全局变量
- 24. Javascript:在.js文件之间共享全局变量
- 25. 在页面间共享数据的最佳实践
- 26. 查看模型(ViewData),UserControls/Partials和全局变量 - 最佳实践?
- 27. TypeScript:全局静态变量最佳实践
- 28. Pyramid中的所有请求之间共享的全局变量
- 29. 活动之间交互的最佳实践
- 30. 片段和活动之间的沟通 - 最佳实践
你能解释一下你究竟想要达到什么样的目的或解决什么问题吗? – Asahi 2014-10-12 10:55:38
使用'Application'类https://www.intertech.com/Blog/androids-application-class/ – 2017-12-21 04:13:26