Android 什么';在SharedReferences中,commit()和apply()之间的区别是什么
我正在android应用程序中使用Android 什么';在SharedReferences中,commit()和apply()之间的区别是什么,android,sharedpreferences,Android,Sharedpreferences,我正在android应用程序中使用SharedReferences。我正在使用共享首选项中的commit()和apply()方法。当我使用AVD2.3时,它不显示错误,但当我在AVD2.1中运行代码时,apply()方法显示错误 那么这两者之间有什么区别呢?通过仅使用commit()可以存储首选项值而没有任何问题吗?apply()是在2.3中添加的,它提交,而不返回表示成功或失败的布尔值 commit()如果保存有效,则返回true,否则返回false 添加了apply(),因为Android开
SharedReferences
。我正在使用共享首选项中的commit()
和apply()
方法。当我使用AVD2.3时,它不显示错误,但当我在AVD2.1中运行代码时,apply()
方法显示错误
那么这两者之间有什么区别呢?通过仅使用commit()
可以存储首选项值而没有任何问题吗?apply()
是在2.3中添加的,它提交,而不返回表示成功或失败的布尔值
commit()
如果保存有效,则返回true,否则返回false
添加了apply()
,因为Android开发团队注意到几乎没有人注意到返回值,所以apply速度更快,因为它是异步的
来自javadoc:
与commit()不同,commit()编写
持久存储的首选项
同步地,apply()提交其
对内存中的
立即共享引用,但
启动对磁盘的异步提交
你不会收到任何通知
失败。如果此SharedReferences上的另一个编辑器在>apply()仍然未完成时执行常规提交(),则提交()将被阻止,直到完成所有异步提交以及提交本身
tl;医生:
同步写入数据(阻止从其调用的线程)。然后,通知您手术成功commit()
计划异步写入数据。它不会告诉你手术成功的消息apply()
- 如果使用
保存,并通过任何getX方法立即读取,则将返回新的值李>apply()
- 如果在某个时间点调用了
,但它仍在执行,则对apply()
的任何调用都将被阻止,直到所有过去的apply调用和当前的commit调用完成commit()
- 如果在某个时间点调用了
这些文档很好地解释了和之间的区别: 与
commit()
不同,后者将其首选项写入持久化
同步存储,apply()
将其更改提交到内存中的
SharedReferences
立即执行,但启动对的异步提交
磁盘,您将不会收到任何故障通知。如果另一个编辑在
此SharedReferences
执行常规的commit()
,而apply()
执行
仍然未完成,commit()
将阻塞,直到完成所有异步提交
与提交本身一样完成。作为SharedReferences
实例
如果进程中存在单例,则可以安全地替换 如果已忽略返回值,则使用
apply()
提交()
我在使用apply()而不是commit()时遇到一些问题。正如前面在其他响应中所述,apply()是异步的。我遇到的问题是,形成“字符串集”首选项的更改永远不会写入持久内存 如果您“强制扣留”程序,或者在我用Android 4.1安装在设备上的ROM中,由于内存的需要,进程被系统终止,就会发生这种情况 如果希望您的首选项处于活动状态,我建议使用“提交()”而不是“应用()”。使用应用() 它会立即将更改写入RAM,并等待更改完成后将其写入内部存储器(实际首选项文件)。Commit将更改以同步方式直接写入文件
是同步的,commit()
是异步的apply()
是无效函数apply()
如果新值成功写入持久存储,则返回truecommit()
apply()
commit()
返回的值,并且正在使用从主线程返回的commit()
,请使用apply()
而不是commit()
commit()和apply()之间的区别
当我们使用SharedReference时,我们可能会被这两个术语弄糊涂。基本上,它们可能是相同的,所以让我们澄清commit()和apply()的区别
1.返回值:
apply()
提交时不返回表示成功或失败的布尔值。
commit(
)如果保存有效,则返回true,否则返回false
apply()
更快。
commit()
速度较慢
apply()
:异步
comm