afkT / DevUtils

:fire: ( 持续更新,目前含 300+ 工具类 ) DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。该项目尽可能的便于开发人员,快捷、高效开发安全可靠的项目。
Apache License 2.0
1.37k stars 305 forks source link

SharedUtils #7

Closed jiachengliu closed 4 years ago

jiachengliu commented 4 years ago

com.github.afkT:DevUtils:1.7.6@aar

当下面三行同时执行

SharedUtils.put(“k”,v);
android.os.Process.killProcess(android.os.Process.myPid());
finish();

的时候,有时候数据是保存不成功的。 单单执行SharedUtils.put(“k”,v);是没问题的。

afkT commented 4 years ago

该 SharedUtils 实现,最终都是调用 SharedPreferences.Editor apply()

apply 是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而 commit 是同步的提交到硬件磁盘

实际操作,应该在存储后,延迟一会,才进行 killProcess、finish()

jiachengliu commented 4 years ago

该 SharedUtils 实现,最终都是调用 SharedPreferences.Editor apply()

apply 是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而 commit 是同步的提交到硬件磁盘

实际操作,应该在存储后,延迟一会,才进行 killProcess、finish()

看出来了,但是会有人也遇到同样的情况。

jiachengliu commented 4 years ago

该 SharedUtils 实现,最终都是调用 SharedPreferences.Editor apply()

apply 是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而 commit 是同步的提交到硬件磁盘

实际操作,应该在存储后,延迟一会,才进行 killProcess、finish()

我现在把这个类复制出来改成commit了。

afkT commented 4 years ago

因为如果使用 commit 会堵塞线程,如果有特殊需求,可以单独 copy 实现这样的需求