Android 应用程序具有两种在 Activity 之间传递数据的解决方案(请不要 Intent 额外!)
public class A {
public static LinkedHashMap<String,String> hashStore = new LinkedHasMap<String,String>();
public void doHttp(){
//Some HTTP call and store some json value
hashStore.put("data","jsonKeyValue");
}
public void onDestroy(){
hashStore.remove(key);// remove data key
hashStore.clear();
}
}
public class B {
public void getHttp(){
//Some HTTP call
String extra = A.hashStore.get("data");
}}
// SharedPreference Call
public class A{
SharedPreference hashPref ; //declaration on onCreate
public void dohttp(){
//Some Http and Store value in SharedPreferences
hashPref.put("data","jsonkeyvalue");
hashPref.apply();
}}
public class B{
SharedPreference hashPref ; //declaration on onCreate
public void getHttp(){
//Some HTTP call
String extra = hashPref.get("data");
}}
- 哪一种是减少内存泄漏的更好选择?
- 如果我存储超过 30-40 个 key ,哪一个会更好?
- 如果我使用共享首选项,我在验证和更新 key 时不会影响性能吗?
- 除了这两种解决方案之外,我还可以使用其他替代方案吗? (不要在这里提及 Intent Extras。)
最佳答案
根据许多原则( high cohesion, decoupling, minimice dependency, Protected Variations... ),使用您的 Activity 作为静态数据源,并让您的其他 Activity 依赖于它(甚至知道该 Activity 存在)是一种不好的做法,但 Android 团队有一些类似的做法您可以依赖的方法,但出于同样的原因,它们不应该是第一个选择。
我更喜欢的是:
如果数据必须持久化:
- 适用于少量数据的 SharedPreferences
- 可容纳更多数据的 SQLite 数据库
如果您不需要保留数据
- 一项始终运行的服务,您可以绑定(bind)到您的所有 Activity ,您可以在其中拥有所有常用数据和功能。
- 拥有数据的辅助对象。
您可以在这个android官方faq page中找到更多信息或者在这个伟大的SO answer ,这是基于该常见问题解答,但有一些代码示例
关于java - 静态 Linkedhashmap 还是 Sharedpreference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904419/