QBugHunter
V2EX  ›  Android

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

  •  
  •   QBugHunter · Nov 30, 2020 · 13082 views
    This topic created in 2016 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
        1
    ntdll  
       Nov 30, 2020
    建议在 onPause 里调用。通常来说 onDestory 是没问题的,但架不住用户强杀,那就没这个回调了。

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