【发布时间】:2016-05-31 04:34:28
【问题描述】:
当用户登录我正在开发的应用程序时,后端会发回有关用户的信息。我想保留这些信息,以便在其他活动以及没有网络访问时使用。
我知道的 Android 的两个主要持久性选项是 SharedPrefereces 和 SQLite,我正在尝试确定哪个更适合我的用例。有三个要求:
- 要存储的数据多为少数原始数据类型或简单引用类型,但也可能需要存储数组或派生类型的对象。
- 数据的读取和写入应尽可能简单。
- 写入的数据必须在任何后续读取时都可用。
这是我在这些维度上比较 SharedPreferences 和 SQLite 的尝试。 (请注意,StackOverflow 上还有其他问题要求比较 SharedPreferences 和 SQLite——"Pros and Cons of SQLite and Shared Preferences"、"Saving data on Android : File Storage vs SQLite Database vs Shared Preferences"——但答案并未涵盖所有三个维度。)
SharedPreferences
- 最自然地使用原始和简单的引用类型,但 GSON 可用于存储任何类型的数据。
- 可以从 UI 线程写入和读取数据。
- 由于竞争条件,无法保证写入 SharedPreferences 的数据在任何后续读取时都可用。
SQLite
- 可以以自然的方式用于存储任何复杂程度的结构化数据。
- 应在与 UI 线程分开的线程中写入和读取数据。
- 使用单例 DatabaseHelper 可确保写入数据库的数据在任何后续读取时都可用。
如果我的评估是正确的,看起来 SharedPreferences 竞争条件意味着我必须改用 SQLite 来满足要求,即使这样做涉及更多。但我的评估是否正确?
【问题讨论】:
标签: android multithreading sqlite sharedpreferences android-sharedpreferences