什么更有效?静态,数据传递,共享首选项,数据库......?

SKT*_*SKT 17 android

我最近在android上做了一个应用程序,在某些方面我怀疑哪个是共享数据的有效方式.就像我可以在一个类中声明静态变量和使用Classname.Variablename调用来自其他类变量或者我可以通过这些数据与我的意图,并从其他类得到的意图数据或者我可以使用共享偏好,并从数据它甚至可以将数据存储在数据库中,并从数据库中的其他类中检索它.我怀疑哪个是最有效的方法(获取数据)?由于android应用程序最终是为手机设计的,因此内存使用和效率应该是约束.任何人都可以指导我走正确的道路,这将非常有帮助.

Sad*_*amy 25

我的意见:

每个最好取决于场景.让我解释.

静态变量:

静态变量是访问整个应用程序上下文的常用方法.如果您希望维护一些在退出应用程序后无需维护的数据,那么这是最好的数据.

通过Intent传递数据:

这不是一种数据存储.这是一种数据共享.我认为这是将数据从活动传递到活动的最佳方式.但是在Constants中维护值的关键是一个很好的编程.

共享偏好:

共享首选项只不过是一个包含两列的简单表.(核心价值).

好处:

  1. 快速检索
  2. 易于理解和编程

缺点:

  1. 如果我们存储大量值,维护密钥很困难.
  2. 用户可以随时清除此信息.

数据库:

当我们有很多值存储复杂结构时,我们只剩下一个很好的解决方案,即.D B.

好处

  1. 我们可以维护数据结构.
  2. Android有很好的简单API来处理sqlite操作.

缺点

  1. 与共享首选项相比,操作有点慢.
  2. 用户可以随时清除它.

所以我们发现主要的问题是我们不能保持持久性我们使用的存储.一个简单而有效的解决方案是在每次启动应用程序时将数据保持在线并与移动数据库同步.

  • 与共享pref相比,你确认sqlite操作的来源有多慢? (4认同)

Far*_*han 5

我可能是错的,但我觉得我必须分享我的知识/经验......最快和最简单的方法是使用静态......但我不会推荐这个。

我的选择是:数据库

原因:

1-通过声明静态变量,not reliable就像在某个阶段一样,当您的应用程序或其他应用程序占用太多内存时,GC 将尝试收集所有未引用的对象,静态是一个很好的候选者......就像活动 A 一样静态变量并且您当前在活动 B 中,现在 gc 将删除 A 及其对象,它也有可能收集静态变量。现在选择数据库在这里很明显,我不需要告诉你,因为在你当前的活动中你总是可以从数据库中检索数据。

2-通过声明静态变量,如果它只是一个 int 或小数据类型,那没什么大不了的,但是如果你要保存一个复杂结构的大列表,那么你的活动很有可能leak memory是也会给你添麻烦。如果您正确使用数据库,则不会泄漏。

SharedPreference/intent 也很好/快速/内存效率高(我猜),但在传递大型复杂结构时可能会有点混乱。

总而言之,如果您只想传递一个小结构(字符串 + 整数)并且您的应用程序没有触及堆的限制,那么static您可以使用,但是如果您正在执行一些内存密集型调用并传递一些大数据,则database是可靠,可能比静态慢一点,但足够快,我们不会注意到。

希望能帮助到你。

  • 关于你的第一点,我不相信静态是垃圾收集。请参阅 http://stackoverflow.com/questions/453023/are-static-fields-open-for-garbage-collection。使用静态仍然是一个坏主意,因为当进程被终止时它们就会消失。 (2认同)