And*_*lva 412 android sharedpreferences
我在我的Android应用程序中使用共享首选项.我正在使用共享偏好中的两者commit()
和apply()
方法.当我使用AVD 2.3时它没有显示错误,但是当我在AVD 2.1中运行代码时,apply()
方法显示错误.那么这两者有什么区别?通过使用commit()
我只能存储偏好值没有任何问题?
Ray*_*ton 626
apply()
在2.3中添加,它提交时不返回表示成功或失败的布尔值.
commit()
如果保存工作则返回true,否则返回false.
apply()
因为Android开发团队注意到几乎没有人注意到返回值,所以应用程序更快,因为它是异步的.
http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()
Luk*_*uth 207
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()即可.
Jos*_*ura 22
我在使用apply()而不是commit()时遇到了一些问题.如前面在其他响应中所述,apply()是异步的.我遇到的问题是,对"字符串集"首选项形成的更改永远不会写入持久性内存.
如果您"强行扣留"程序,或者在我使用Android 4.1安装在我的设备上的ROM中,当系统由于内存需要而导致该进程被终止时,就会发生这种情况.
如果您希望自己的偏好存活,我建议使用"commit()"而不是"apply()".
Nur*_*yev 13
commit()
是同步的,apply()
是异步的
apply()
是无效的功能.
commit()
如果新值已成功写入持久存储,则返回true.
apply()
在切换状态之前保证完整,您不必担心Android组件的生命周期
如果你不使用来自返回值commit()
和你使用commit()
的主线程,使用apply()
替代 commit()
Cha*_*ghe 12
\n\n\ncommit() 和 apply() 之间的区别
\n
当我们使用 SharedPreference 时,我们可能会对这两个术语感到困惑。基本上它们可能是相同的,所以让\xe2\x80\x99s澄清commit()和apply()的区别。
\n\n\n\n\n1.返回值:
\n
apply()
提交而不返回指示成功或失败的布尔值。\n commit(
) 如果保存有效则返回 true,否则返回 false。
\n\n\n\n
\n- 速度:
\n
apply()
更快。\ncommit()
更慢。
\n\n\n\n
\n- 异步与同步:
\n
apply()
: 异步\n commit()
: 同步
\n\n\n\n
\n- 原子:
\n
apply()
: 原子\n commit()
: 原子
\n\n\n\n
\n- 错误通知:
\n
apply()
: 否\n commit()
: 是
来自javadoc:
与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败.如果此SharedPreferences上的另一个编辑器执行常规commit()而> apply()仍未完成,则commit()将阻塞,直到完成所有异步提交以及提交本身
归档时间: |
|
查看次数: |
105678 次 |
最近记录: |