QBugHunter
V2EX  ›  Android

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

  •  
  •   QBugHunter · Nov 30, 2020 · 13855 views
    This topic created in 2174 days ago, the information mentioned may be changed or developed.

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

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

    9 replies  •  2020-12-03 10:03:32 +08:00
    ntdll
    ntdll
    Nov 30, 2020
    1
    建议在 onPause 里调用。通常来说 onDestory 是没问题的,但架不住用户强杀,那就没这个回调了。

    通常情况下,即使用户强杀应用,不是命令行或者其他拥有 root 权限的应用,至少会先切出应用,那至少会回调 onPause,应该认为是可靠的。
    rb6221
    rb6221
    Dec 1, 2020
    2
    你把他们拼起来变成一个大 int 相当于只存一个值就行了
    starerlloll
    starerlloll
    Dec 1, 2020
    3
    要及时更新,这种状态的值没必要留到最后一起更新。。你什么时候改变的状态就什么时候存。如果你觉得说太频繁了的话,搞个本地的数据库做
    chenjiajia9411
    chenjiajia9411
    Dec 1, 2020
    4
    建议直接改用 MMKV……
    luyao1993
    luyao1993
    Dec 2, 2020
    5
    在 onDestroy() 或者 onStop() 这种调用时机本身就不确定的回调中做数据处理操作,本身就可能导致意料之外的问题。不是很频繁的修改的话,完全可以每次修改就存储。
    QBugHunter
    QBugHunter
    OP
    Dec 2, 2020
    6
    @luyao1993
    EventBus 的 unregister()函数不就是写在 OnDestory()函数里的吗?
    stardust21
    stardust21
    Dec 2, 2020
    7
    用 apply 是异步执行的,或者换 mmkv 之类其他的方案
    xierbenq
    xierbenq
    Dec 2, 2020
    8
    apply/commit,你自己测下耗时不就知道了
    Nuttertoo1s
    Nuttertoo1s
    Dec 3, 2020
    9
    保存状态最好用 onSaveInstanceState,onDestory()这个生命周期在某些情况下是不会执行的。在 onDestory()方法里进行状态保存很有可能会造成数据丢失
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1054 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:27 · PVG 07:27 · LAX 15:27 · JFK 18:27
    ♥ Do have faith in what you're doing.