SharedPreferences 储存 10-15 个 int,可以放在 Ondestory()里吗?

2020-11-30 20:15:17 +08:00
 QBugHunter

RT 现在有 10-15 个 int 用于表示一些状态,需要 APP 每次启动时读取这些状态(上次关闭时)。这些 int 通过 SharedPreferences 类来储存,在某个 Activity 的 OnDestory()里储存,这样用户关闭 APP 时后能保证 APP 储存最后一次的状态

然后我看一些资料(第一行代码),上面说 OnDestory()函数里不能执行耗时过多的操作,我向问下,以小米 9 为例,在 OnDestory()函数里用 SharedPreferences 储存 10-15 个 int,这个操作是否属于比较耗时的操作?

8584 次点击
所在节点    Android
9 条回复
gam2046
2020-11-30 20:52:58 +08:00
建议在 onPause 里调用。通常来说 onDestory 是没问题的,但架不住用户强杀,那就没这个回调了。

通常情况下,即使用户强杀应用,不是命令行或者其他拥有 root 权限的应用,至少会先切出应用,那至少会回调 onPause,应该认为是可靠的。
janus77
2020-12-01 09:58:17 +08:00
你把他们拼起来变成一个大 int 相当于只存一个值就行了
starerlloll
2020-12-01 10:15:49 +08:00
要及时更新,这种状态的值没必要留到最后一起更新。。你什么时候改变的状态就什么时候存。如果你觉得说太频繁了的话,搞个本地的数据库做
chenjiajia9411
2020-12-01 12:28:41 +08:00
建议直接改用 MMKV……
luyao1993
2020-12-02 09:50:54 +08:00
在 onDestroy() 或者 onStop() 这种调用时机本身就不确定的回调中做数据处理操作,本身就可能导致意料之外的问题。不是很频繁的修改的话,完全可以每次修改就存储。
QBugHunter
2020-12-02 09:54:04 +08:00
@luyao1993
EventBus 的 unregister()函数不就是写在 OnDestory()函数里的吗?
stardust21
2020-12-02 11:30:06 +08:00
用 apply 是异步执行的,或者换 mmkv 之类其他的方案
xierbenq
2020-12-02 16:10:11 +08:00
apply/commit,你自己测下耗时不就知道了
Nuttertoo1s
2020-12-03 10:03:32 +08:00
保存状态最好用 onSaveInstanceState,onDestory()这个生命周期在某些情况下是不会执行的。在 onDestory()方法里进行状态保存很有可能会造成数据丢失

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/730720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX