Ved*_*agh 5 java android sharedpreferences
所以,我现在正面临这个奇怪的问题。我HAVE使用SharedPreferences.Editor()。提交()在我的Android应用程序,但是,因为文档在这里指出,
由于SharedPreferences实例是流程中的单例,因此如果您已经忽略了返回值,则可以安全地用apply()替换任何commit()实例。
您无需担心Android组件的生命周期及其与apply()写入磁盘的交互。该框架确保在切换状态之前完成对apply()的运行中磁盘写入。
基本上commit(),apply()如果您不使用返回值BUT,则可以安全地替换为BUT,这是这里提到的两者之间的区别,并且在Android Studio中警告说,这是commit()立即写入数据,而BUT apply()异步执行。
所以我的问题是,我正在更改应用程序中的语言,并且要在用户选择语言后重新启动应用程序。但是,当用户选择语言时,将输入当前选择的语言SharedPreferences。
现在,问题是:
每当我使用代码apply()代替此处commit()的代码并重新启动应用程序以在此处重新启动应用程序时,所做的更改都不会写入磁盘,因为当应用程序重新启动时,它不会更改当前语言,因为from的值SharedPreference不会更改,因为它不会立即写入磁盘。但是,无论何时使用commit(),更改都会立即写入,并且在重新启动应用程序后会成功更改语言。
因此,问题是:
如果有很大的不同,编写代码commit()并apply()声明使用apply()而不是完全安全的人会立即写出数据,但是会在后台执行呢?commit()commit()apply()
如果我构建了apk,如果我不使用返回值,它将在代码优化中commit()被替换apply()(我知道我可以通过构建应用程序的发行版来知道这一点,但是我仍然不确定,因为当我使用apply()veerery 时,它通常会更改1/10次,但确实会从SharedPreference更改值
一张纸条:
问题是,使用Runtime.getRuntime().exit(0)或System.exit(0)你会终止进程,因此之后不会执行任何计划的异步任务。
如果您不打算更改重新启动代码,则应保留commit而不是apply针对此实例并取消警告。
exit(0)是一种边缘情况,您通常不应该这样做。commit会被apply自动替换。如果你想确保它,只需使用返回值。| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |