Android应用多Activity状态保存及编辑按钮恢复可行性问询
多Activity状态保存方案解答
这个需求完全可以实现,核心思路是全局共享状态统一管理 + 各Activity独立维护独有状态,具体可按以下方案落地:
- 全局共享状态管理
你提到的修改应用信息后所有页面同步生效的场景属于跨页面共享状态,两种常用实现方式:- 用单例模式的全局存储类,或
DataStore/SharedPreferences做持久化存储,修改后主动通知栈内所有存活的Activity更新对应UI即可 - 也可以使用Application级别的
ViewModel,所有Activity复用同一个实例存储全局共享状态,给状态绑定观察者后,修改操作会自动通知所有关联页面更新,不需要手动做状态恢复
- 用单例模式的全局存储类,或
- 各Activity独有状态保存
- 未被系统销毁的栈内Activity本身会持有自身独有状态(比如列表滚动位置、输入框未提交内容等),收到全局状态更新通知后仅需要更新变动部分,其余状态会自动保留
- 若担心Activity被系统后台回收,每个Activity依然沿用原生的
onSaveInstanceState()方法保存自身非全局的独有状态,重建时从Bundle中恢复即可,和单Activity的状态保存逻辑完全一致,不需要额外适配
- 特殊场景适配
- 如果点击编辑按钮后会销毁之前的Activity栈,编辑完成后需要重建整个栈,可在跳转编辑页之前,将栈内所有Activity的状态序列化后存入全局缓存结构,重建每个Activity时将对应状态传入恢复即可
- 如果修改信息后需要回退到之前的多个页面,不需要销毁重建,直接用
startActivity的Flag控制栈回退,或用Activity Result API逐层回传修改结果,每层Activity收到结果后更新对应UI即可,原有页面状态不会丢失
内容的提问来源于stack exchange,提问作者selenophile
相关产品推荐
相关产品推荐

