Android中共享首选项的最佳替代方案是什么?

Mr.*_*dia 10 performance android sharedpreferences

哪个是Shared Preferencesandroid存储数据的最佳选择,如果我想读取数据并再次保存一些更改.数据可以是用户的配置文件,json响应或任何对象.当我存储大量数据时,我正在搜索Reda/Write数据的其他耗时较少的选项.目前我的应用程序需要x毫秒才能从活动A转到活动B.我可以减少这个时间吗?

Mat*_*ych 20

如果不深入了解您的用例,很难向您推荐任何内容.

  • 如果您想存储一些用户偏好数据 - SharedPreferences可能是一个不错的选择.
  • 如果您想存储身份验证数据(例如用户的身份验证令),请不要使用SharedPreferences并查看AccountManager.
  • 如果您想存储业务数据,例如多个业务实体,这些业务实体之间保持一定的关系,您希望能够查询和/或修改它 - 我建议您使用Realm - https:// realm. io.另一种方法是使用SQLite,但在我非常主观的意见中,Realm更容易入手.
  • 如果您只想缓存一些基于JSON的响应 - 请查看HTTP客户端可能为您提供的缓存机制.OkHttp例如,对此有很好的支持.

说到加载时间 - SharedPreferences一般来说非常快,但它实际上取决于你如何使用它.如果你在其中存储大的JSON结构,那么完全读取它只是为了找到一些基于id的特定对象 - 显然它需要比使用真实数据库更多的时间.

在所有的解决方案,我建议记(AccountManager,SharedPreferences和SQLite /域)可以在一个应用程序彼此很好地工作.只需确保为给定问题选择合适的工具.


小智 11

Jetpack DataStore是一种经过改进的全新数据存储解决方案,旨在取代 SharedPreferences。DataStore 基于 Kotlin 协程和 Flow 构建,提供两种不同的实现:

\n

数据以异步、一致和事务方式存储,克服了 SharedPreferences 的大部分缺点。

\n

如果您当前使用 SharedPreferences 来存储数据,请考虑迁移到 DataStore。

\n

数据存储类型

\n

DataStore提供了两种不同的实现:

\n

首选项 DataStore \xe2\x80\x93 使用键存储和访问数据。此实现不需要预定义模式,并且不提供类型安全。

\n

原始数据存储 \xe2\x80\x93 将数据存储为自定义数据类型的实例。此实现要求您使用协议缓冲区定义模式,但它提供类型安全。

\n

共享首选项与数据存储

\n

SharedPreference 会阻塞由 apply() 调度的挂起的 fsync() 调用上的 UI 线程,这通常会成为 ANR 的来源。

\n

SharedPreferences 将解析错误作为运行时异常抛出。

\n

在这两种实现中,DataStore 将首选项保存在文件中,并在 Dispatchers.IO 线程上执行所有数据操作。

\n

参考:DataStore \xe2\x80\x93 Jetpack 替代 SharedPreference

\n


Ros*_*des 0

我找不到更好的方法来保存用户数据。SharedPreferences 正是为此目的而创建的。SharedPreferences 不应阻止您的活动加载。因此,可能还有其他因素会降低您的表现。