我应该在我的应用程序中使用Android SharedPreferences或SQLite来保持持久性吗?

时间:2016-02-18 19:53:28

标签: android multithreading sqlite sharedpreferences android-sharedpreferences

当用户登录我正在开发的应用程序时,后端会发回有关该用户的信息。我想保留信息,以便在没有网络访问时可以用于其他活动。

我知道Android的两个主要持久性选项是SharedPrefereces和SQLite,我正在尝试确定哪个更适合我的用例。有三个要求:

  1. 要存储的数据主要是少数原始数据类型或简单引用类型,但也可能需要存储数组或派生类型的对象。
  2. 读取和写入数据应尽可能简单。
  3. 任何后续阅读都必须提供已写入的数据。
  4. 这是我尝试在这些维度上比较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

    1. 最自然地使用原始和简单的引用类型,但GSON可用于存储任何类型的数据。
    2. 可以从UI线程写入和读取数据。
    3. 由于竞争条件,无法保证写入SharedPreferences的数据在任何后续阅读中都可用。
    4. SQLite的

      1. 可以以自然的方式用于存储任何复杂程度的结构化数据。
      2. 应在与UI线程分开的线程中编写和读取数据。
      3. 使用单例DatabaseHelper可确保在随后的任何读取中都可以使用写入数据库的数据。
      4. 如果我的评估是正确的,看起来似乎是SharedPreferences竞争条件意味着我必须使用SQLite来满足要求,即使这样做涉及更多。但我的评估是否正确?

1 个答案:

答案 0 :(得分:0)

你说:

  

少量原始数据类型或简单引用类型

然后绝对是SharedPreferences。如果您可以映像以拥有许多类似的行数据,这些行都是唯一行,那么请使用SQLite。您有三个要求,但它们都不需要存储大量相似但仍然独特的数据。

另一方面:

  

也可能需要存储派生类型的数组或对象。

我建议将这些数据存储在私有文本文件中,并且每次启动应用程序都会尝试解码数据(如果存在)。