重学安卓:绝不丢失状态的 Activity 重建机制! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KunMinX
V2EX    Android

重学安卓:绝不丢失状态的 Activity 重建机制!

  •  
  •   KunMinX 2019-06-17 10:22:31 +08:00 12458 次点击
    这是一个创建于 2309 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 (1)-min.gif

    文章目录一览

    • 前言
    • 因为心里没底,而不敢用的状态恢复
    • 什么是重建?引发重建的场景有哪些?
    • 为何要计出重建的机制?有何好处?
    • 状态保存和恢复的具体过程?( 99% 的网文遗漏的关键细节)
    • 状态保存和恢复的的注意事项?
    • 如何避免 “配置发生变化” 导致的重建?
    • 综上

    原文: https://juejin.im/post/5d03be376fb9a07eca697906

    6 条回复    2019-06-17 13:34:11 +08:00
    KunMinX
        1
    KunMinX  
    OP
       2019-06-17 11:05:43 +08:00
    阅读完的小伙伴,即使不为本文点赞,也请为自己点个赞!

    其实这类进阶基础的硬核文章,就像乘坐杭州地铁一样。

    多数人自以为很会买票、而不屑学习和改进、在老式购票机器前排起长长的队。

    只有极少数主动思考的人,才会知道:其实根本不用买票,更不用排队,扫码即可进站!
    firefffffffffly
        2
    firefffffffffly  
       2019-06-17 11:50:22 +08:00
    1. Saved instance state 也是基于序列化与反序列化的磁盘访问,与设计良好的自定义持久化缓存性能应该没有区别,自定义持久化性能问题主要来自于持久化方式的设计问题。

    2. 自定义持久化的生命周期是比 Saved instance state 要长的,可以做到 activity 反复 finish/start 之后也能共享数据,这个场景是不能被 SavedInstanceState 取代的,不过这个应该不是这篇文章的重点。

    3. 由于 SavedInstanceState 的性能问题,android 官方推荐将页面状态拆分,使用 ViewModel 模式内存存储绝大部分状态,小部分关键状态交给 SavedInstanceState 保存。

    4. 大部分状态保持问题并非是使用错了方式,而是没有理清页面上所存在的状态,导致状态只有一部分被恢复 /保存,进而把整个页面逻辑导向到不可预测的方向。

    5. 推荐其他开发者使用 android:configChanges 时,最好同时告诉他们可能存在的副作用: https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

    以上内容均总结于官方文档( https://developer.android.com/topic/libraries/architecture/saving-states
    kylix
        3
    kylix  
       2019-06-17 12:10:56 +08:00
    啊?我有公交卡啊!排啥队?扫啥码?不懂
    :)
    BigDogWang
        4
    BigDogWang  
       2019-06-17 12:21:55 +08:00
    老哥你的同事有点菜#滑稽
    KunMinX
        5
    KunMinX  
    OP
       2019-06-17 12:38:28 +08:00
    @firefffffffffly 感谢你的补充 : )

    @BigDogWang 说我同事 “菜” 之前,请务必自检一下下文《 Activity 任务和返回栈》的 11 道深度思考提问,你若答得上 2 个,我就算你过! #阴险滑稽

    https://xiaozhuanlan.com/topic/7812045693
    seabirds
        6
    seabirds  
       2019-06-17 13:34:11 +08:00
    @kylix 哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3612 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:08 PVG 08:08 LAX 17:08 JFK 20:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86