我在我的Android应用程序中使用共享首选项。 我正在使用共享首选项中的commit()apply()方法。 当我使用AVD 2.3时它没有显示错误,但是当我在AVD 2.1中运行代码时, apply()方法显示错误。 那么这两者有什么区别? 通过只使用commit() ,我可以存储首选项值没有任何问题吗?


#1楼

我在使用apply()而不是commit()时遇到了一些问题。 如前面在其他响应中所述,apply()是异步的。 我遇到的问题是,对“字符串集”首选项形成的更改永远不会写入持久性内存。

如果您“强行扣留”程序,或者在我使用Android 4.1安装在我的设备上的ROM中,当系统由于内存需要而导致该进程被终止时,就会发生这种情况。

如果您希望自己的偏好存活,我建议使用“commit()”而不是“apply()”。


#2楼

使用apply()。

它立即将更改写入RAM并等待并将其写入内部存储(实际首选项文件)之后。 Commit将更改同步并直接写入文件。


#3楼

  • commit()是同步的, apply()是异步的

  • apply()是void函数。

  • 如果新值已成功写入持久存储,则commit()返回true。

  • apply()保证在切换状态之前完成,您不必担心Android组件的生命周期

如果你不使用从commit()返回的值,并且你从主线程使用commit() ,请使用apply()而不是commit()


#4楼

commit()和apply()之间的区别

当我们使用SharedPreference时,我们可能会对这两个术语感到困惑。 基本上它们可能是相同的,所以让我们澄清commit()和apply()的区别。

1.返回值:

apply()提交而不返回指示成功或失败的布尔值。 如果保存工作, commit( )返回true,否则返回false。

  1. 速度:

apply()更快。 commit()比较慢。

  1. 异步与同步:

apply() :异步commit() :同步

  1. 原子:

apply() :atomic commit() :atomic

  1. 错误通知:

apply() :没有commit() :是的


#5楼

apply()在2.3中添加,它提交时返回表示成功或失败的布尔值。

如果保存工作, commit()返回true ,否则返回false

apply()被添加,因为Android开发团队注意到几乎没有人注意到返回值,因此apply更快,因为它是异步的。

http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()


#6楼

来自javadoc:

与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败。 如果此SharedPreferences上的另一个编辑器执行常规commit()而> apply()仍未完成,则commit()将阻塞,直到完成所有异步提交以及提交本身


#7楼

TL;博士:

  • commit() 同步写入数据(阻塞调用它的线程)。 然后它会通知您操作的成功。
  • apply()调度要异步写入的数据。 它不会告诉您操作是否成功。
  • 如果使用apply()保存并立即通过任何getX方法读取 ,则将返回值!
  • 如果您在某个时刻调用了apply()并且它仍在执行,则对commit()任何调用都将阻塞,直到所有过去的apply-calls 当前的commit-call完成为止。

来自SharedPreferences.Editor文档的更深入信息:

commit()同步地将其首选项写入持久存储apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败 。 如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身。

由于SharedPreferences实例是进程中的单例,因此如果您已经忽略了返回值,则可以使用apply()替换commit()的任何实例。

SharedPreferences.Editor接口不应直接实现。 但是,如果您之前已实现它并且现在收到有关缺少apply()的错误,则只需从apply()调用commit()即可。


#8楼

这些文档很好地解释了apply()commit()之间的区别:

commit()同步地将其首选项写入持久存储, apply()将其更改提交到内存中的SharedPreferences ,但会启动异步提交到磁盘,并且不会通知您任何失败。 如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit() ,则commit()将阻塞,直到完成所有异步提交以及提交本身。 由于SharedPreferences实例是进程中的单例,因此如果您已经忽略了返回值,则可以使用apply()替换commit()任何实例。

共享首选项中commit()和apply()之间的区别是什么相关推荐

  1. android 类对象的存储,android - 以共享首选项存储和检索类对象

    android - 以共享首选项存储和检索类对象 在Android中,我们可以在共享首选项中存储类的对象,并在以后检索该对象吗? 如果有可能怎么办? 如果不可能做到这一点的其他可能性是什么? 我知道序 ...

  2. android实例教程_Android共享首选项示例教程

    android实例教程 In this tutorial we'll use Shared Preferences in our android application to store data i ...

  3. SD卡读写,首选项,共享首选项

    Android-SD卡读写 adb shell mksdkcard 50m d:\xxx\xxxx.img 挂载/卸载sd卡 <uses-permission android:name=&quo ...

  4. java插件获取首选项_Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

    Eclipse RCP的插件中若想自己定义首选项需要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse. ...

  5. Tomcat:eclipse首选项中没有tomcat?

    为eclipse添加tomcat插件 近期因为兴趣,找了一个javaweb的纯SSM的项目,但是发现我的eclipse4.7版本的,首选项中竟然没有tomcat,所以在网上找了很多方法,终于找到一个很 ...

  6. (51)FPGA面试题-Verilog中function与task之间的区别是什么?

    1.1 FPGA面试题-Verilog中function与task之间的区别是什么? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-Verilog中fu ...

  7. android手机强制关机代码,android – 当应用程序强制关闭或设备重新启动时,共享首选项重置数据...

    我有一个登录屏幕,希望应用程序看起来好像在应用程序关闭/销毁/电话呼叫等后仍然在内部屏幕上"登录". 我有一个首选项对象来保存登录或注册后的值.我在所有关键屏幕onResume() ...

  8. 在打印服务器中新增纸张规格后,在打印机首选项中的自定义纸张中看不到的原因

    最近在研究lodop这个web打印控件,在使用的过程中因为客户需要两种纸张规格进行打印,为了简化打印过程,通过lodpo的LODOP.SET_PRINT_PAGESIZE(1, 2410, 1400, ...

  9. adobe AE: 磁盘缓存文件夹所在的驱动器没有足够的可用空间来安全存储在首选项中指定的全部量

    看着挺玄乎,就是说,该软件要求性能高,你现在没用足够的磁盘空间给我缓存(其默认为C盘,故而大部分笔记本电脑可能不满足) 所以我们换一个目录就行了: 在其他盘新建一个文件夹选择即可,但别忘了确认,重启一 ...

最新文章

  1. 前端人员如何模拟慢网速环境
  2. 前端开发工程师做些什么?
  3. oracle缩减临时表空间,oracle的临时表空间写满磁盘空间解决改问题的步骤
  4. JAVA入门[23]-SpringBoot配置Swagger2
  5. 区块链分布式云存储项目盘点
  6. 在vue项目中添加特殊字体
  7. Android内容提供器——运行权限
  8. mysql 表示时间_MySQL-时间(time、date、datetime、timestamp和year)
  9. 【小程序开发】微信小程序开发中遇到的那些坑...
  10. 恭喜本月拍牌中标了-上海!
  11. PubMed插件:分区、影响因子和即时IF一目了然,还能秒下文献(亲测有效)
  12. 关于汽油必须知道的11件事 可能是最全的油品全解
  13. 2023面试官常考的前端面试题
  14. android开发收藏功能实现,Android使用Realm数据库如何实现App中的收藏功能
  15. 读《终身学习:10个你必须掌握的未来生存法则》整理
  16. 前进永无止境!Pipeline更新又双叒叕来了!
  17. 华为iot 应用侧 开发
  18. Android复制内容到剪切板上
  19. 产品外观设计有哪些表面处理工艺
  20. pve 导入 ova

热门文章

  1. 自己动手写C语言编译器(2)
  2. 3D模型初探(人体运动学)
  3. RxJava zip 使用
  4. 【剑指offer-Java版】37两个链表的第一个公共结点
  5. Butter Knife 8.8.1的安装和使用
  6. Android的EditText自动获取焦点并弹出输入法问题
  7. 对ViewPager的理解
  8. JVM中垃圾收集算法
  9. python格式化字符串语法_详解Python3 中的字符串格式化语法
  10. 首字母大写 -freeCodeCamp