我应该在我的应用程序中使用Android SharedReferences或SQLite进行持久化吗?
当用户登录到我正在开发的应用程序时,后端会发回有关该用户的信息。我希望保留这些信息,以便在没有网络访问的情况下将其用于其他活动 我知道Android的两个主要持久性选项是SharedPreferes和SQLite,我正在尝试确定哪个更适合我的用例。有三个要求:我应该在我的应用程序中使用Android SharedReferences或SQLite进行持久化吗?,android,multithreading,sqlite,sharedpreferences,android-sharedpreferences,Android,Multithreading,Sqlite,Sharedpreferences,Android Sharedpreferences,当用户登录到我正在开发的应用程序时,后端会发回有关该用户的信息。我希望保留这些信息,以便在没有网络访问的情况下将其用于其他活动 我知道Android的两个主要持久性选项是SharedPreferes和SQLite,我正在尝试确定哪个更适合我的用例。有三个要求: 要存储的数据大多是少量的基本数据类型或简单引用类型,但也可能需要存储派生类型的数组或对象 读取和写入数据应尽可能简单 写入的数据必须在任何后续读取时可用 下面是我试图比较SharedReferences和SQLite在这些维度上的差异。(
我建议将这些数据存储在私人文本文件中,并在每次应用程序启动时尝试解码数据(如果存在) 谢谢你,阿巴斯。但是SharedReference的写入延迟仍然是一个问题(如果我说的没错的话)。我编辑这个问题是为了强调这一点。@stevehs17,当您想写入SharedReferences时,可以使用
Editor.apply()
而不是Editor.commit()
<代码>编辑器.apply()代码>方法是异步的,不会给您带来太多麻烦。阿巴斯:无论我使用commit()还是apply(),如果我随后尝试检索我保存的值,我不清楚如果我尝试检索得太快,它是否可以保证可用。这是我关心的。@stevehs17如果使用commit()
,则不必担心检索已保存的数据,因为它不是异步方法,并且在该方法完成之前,UI线程不会向前移动。我相信它会像你期望的那样工作。只要运行一个小测试,您就会看到。谢谢,阿巴斯。但是如果我必须等待commit()返回,那么我认为不应该从UI线程调用它。