java - 静态 Linkedhashmap 还是 Sharedpreference?

标签 java android performance sharedpreferences linkedhashmap

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"); 
  }}
  1. 哪一种是减少内存泄漏的更好选择?
  2. 如果我存储超过 30-40 个 key ,哪一个会更好?
  3. 如果我使用共享首选项,我在验证和更新 key 时不会影响性能吗?
  4. 除了这两种解决方案之外,我还可以使用其他替代方案吗? (不要在这里提及 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/

相关文章:

java - 如何将数据库中的图片加载到ListView中?

java - 为什么 GSON 在我所有原本不包含任何小数的 JSON 数字之后都加上一个小数点和一个零?

Python 对两个列表求幂的性能

eclipse - 在 OSX 上加速 Eclipse

java - 无法解析扩展 ArrayAdapter 的类中的方法 super

java - 程序未找到 JasperReports 资源包(.properties 文件)

java/eclipse : org. apache.commons.lang.math 添加到构建路径后未解析

android - 如何更改现有的 TextView 样式

java - 由于更改包名称而出错

c++ - 更快的谐波数?