静态 Linkedhashmap 还是 Sharedpreference?

2024-01-10

Android 应用程序具有两种在活动之间传递数据的解决方案(请不要意图额外!)

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 个密钥,哪一个更可取?
  3. 如果我使用共享首选项,我在验证和更新密钥时不会消耗性能吗?
  4. 除了这两种解决方案之外,我还可以使用其他替代方案吗? (不要在这里提及 Intent Extras。)

根据许多原则,将您的活动用作静态数据源,并让其他活动依赖于它(甚至知道该活动存在)是一种不好的做法(高内聚、解耦、最小化依赖、受保护的变化…… http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29),但是 Android 团队有一些类似的方法可供您信赖,但出于同样的原因,它们不应该是首选。

我更喜欢的是:

如果数据必须持久化:

  • 适用于少量数据的 SharedPreferences
  • 适用于更大数据量的 SQLite 数据库

如果你不需要保存数据

  • 始终运行的服务,您绑定到所有活动,其中您拥有所有通用数据和功能。
  • 拥有数据的辅助对象。

您可以在这个 android 官方中找到更多信息faq page http://developer.android.com/guide/faq/framework.html#3或者在这个伟大的所以答案 https://stackoverflow.com/a/4878259/2357411,这是基于该常见问题解答,但有一些代码示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态 Linkedhashmap 还是 Sharedpreference? 的相关文章

随机推荐

  • Vue 3 + Vite + Typescript - 开发和构建未拾取 TS 错误

    我正在使用 Vue 3 Vite 和 TypeScript 我想尝试使用 TypeScript 构建 Vue 项目 到目前为止 配置确实很困难 我一直在查看各种文档 但我正在努力实现我的目标 如果代码有问题 项目不应构建并抛出错误 我附上下
  • NumericUpDown 的 TextChanged 事件

    我正在使用 Microsoft Visual C 2010 Express 当我使用箭头更改 numericUpDown 的值时 我的按钮变为启用 但我还想在通过直接更改文本来更改 numericUpDown 的值时启用按钮 我正在使用以下
  • WCF 命名管道安全性和多用户会话?

    我已经设置了一个使用互斥锁的单实例 WPF 应用程序 如果您使用用户切换 这允许应用程序在每个用户帐户中运行 该应用程序设置了一个 WCF 命名管道 以便我可以从另一个进程与单个实例进行通信 即 当第二个进程在由于互斥锁而终止之前运行时 我
  • 如何在 Ansible 中执行多行 shell 脚本

    现在我在ansible中使用shell脚本 如果它在多行上 那么它的可读性会更高 name iterate user groups shell groupmod o g item guid item username more stuff
  • 无法解析“.NETCoreApp,版本=v2.1”的“Microsoft.NETCore.App (>= 2.1.0)”

    我正在尝试用以下方法解决 nuget 包dotnet restore 但出现以下错误 无法解析 NETCoreApp 版本 v2 1 的 Microsoft NETCore App gt 2 1 0 这是我的 csproj file
  • Android Studio 3.3 错误

    I recently upgraded to Android Studio 3 3 and I ve been working on projects using the IDE for the last week I ve noticed
  • 在 Java 堆空间异常上运行 Cucumber 测试后 Jenkins 构建失败

    使用 Jenkins 构建时出现以下异常 运行 Cucumber 测试后会引发此异常 谁能告诉我java堆空间上失败的确切位置吗 您知道可以采取什么措施来解决这个问题吗 一些背景 我在 Cucumber 测试期间有一个 java 堆空间 在
  • 如何将目录中自动生成的文件列表添加到 JS 文件中?

    我正在用 HTML5 编写一个在线游戏 其中一个文件包含资源列表 这些资源全部位于resources img 文件夹 现在我希望根据此文件夹的内容自动生成此列表 而不必每次添加新图像时手动更新它 我很确定 Grunt 可以做到这一点 但我不
  • 系统安全异常?

    描述 应用程序试图执行安全策略不允许的操作 要授予此应用程序所需的权限 请联系您的系统管理员或在配置文件中更改应用程序的信任级别 异常详细信息 System Security SecurityException 请求 System Secu
  • 将使用react-router v5完成的BreadCrumb组件更改为react router v6

    我想更改使用react router v5完成的BreadCrumb组件以反应router v6 import React from react import Breadcrumbs as MUIBreadcrumbs Link Typog
  • MySQL动态交叉表

    我有一个这样的表 way stop time 1 1 00 55 1 2 01 01 1 3 01 07 2 2 01 41 2 3 01 47 2 5 01 49 3 1 04 00 3 2 04 06 3 3 04 12 我想要一个这样
  • 如何使用 RESTEasy 代理客户端发送查询参数映射

    我正在寻找一种将包含参数名称和值的映射传递到 GET Web 目标的方法 我期待 RESTEasy 将我的地图转换为 URL 查询参数列表 然而 RESTEasy 抛出一个异常说Caused by javax ws rs Processin
  • 递归构建分层 JSON 树?

    我有一个父子关系数据库 数据如下所示 但可以以您想要的任何方式呈现 字典 列表列表 JSON 等 links Tom Dick Dick Harry Tom Larry Bob Leroy Bob Earl 我需要的输出是一个分层 JSON
  • 处理文件名中的特殊字符时批量重命名问题

    我在 c files 中有数百个 mp3 文件 里面有所有可以想象到的文件名 例如 milad mp3 表现良好 嘿你 mp3 文件名中有空格 systemofadown mp3 长文件名 howdy 1 mp3 文件名中的括号 以及最后三
  • 将空图添加到构面,并与另一个构面组合

    Using this SO solution https stackoverflow com questions 30372368 adding empty graphs to facet wrap in ggplot2 I created
  • 可复制的 Coldfusion SQL 异常

    每当 CF 抛出错误时 我都会收到一封包含所有异常信息的电子邮件 每次涉及数据库错误时 我都会得到 SQL WHERE 和 QueryError 信息 这很好 SQL SELECT FooID FROM FooTable WHERE Foo
  • 从会话 Codeigniter 中回显用户

    我是 codeigniter 的新手 我已经实现了一个简单的登录系统 我想在我的视图页面上打印存储在会话中的用户名 这是我的控制器 class LoginController extends CI Controller function i
  • 通过触摸跳转 Unity C#

    我在 Unity C 上编写游戏 这是简单的跑步者 我有 Platformer2DUserControl 脚本 就这个 using UnityEngine using UnitySampleAssets CrossPlatformInput
  • 什么是编程语言? [复制]

    这个问题在这里已经有答案了 可能的重复 什么是计算机编程语言 https stackoverflow com questions 1325686 what is a computer programming language 不完全是 我一
  • 静态 Linkedhashmap 还是 Sharedpreference?

    Android 应用程序具有两种在活动之间传递数据的解决方案 请不要意图额外 public class A public static LinkedHashMap