繁体   English   中英

片段-onDestroy活动后保存/恢复模型的最佳方法?

[英]fragment - best way to save/restore model after onDestroy of activity?

我有一个活动内部托管的片段。 当用户按下后退按钮时,我需要保存模型数据,并在下次用户打开片段/活动时使它可用。 但是就在应用程序中时,它不需要保留到磁盘上。 因此,例如,如果用户破坏了该过程,则无需保留模型数据,则可以再次从网络中获取模型数据。

我曾尝试过: icePickonSavedInstance调用,但是当用户按下片段上的“后退”按钮时,这些调用似乎没有启动。 告诉我我是否错了。

这是我在片段中实现的内容:

 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
           outState.putParcelable("myModel", Parcels.wrap(myModel));
    }

我正在使用包裹库,如果有任何区别。 如果需要,我还可以将代码转换为kotlin。 当我按下“后退”按钮时,片段从堆栈中弹出,并且活动包含该片段,它调用onDestroy,但是即时通讯在onSaveInstanceState中没有得到任何调用。 另外,当我签入onCreate() savedInstanceState为null。 我没有在活动中覆盖onSavedInstance ,只是在片段中。 我究竟做错了什么 ?

我曾经使用数据库来执行此操作,但是我只需要在内存中使用它即可,并且应该有一种无需数据库即可执行此操作的方法。

从我学到的内容,如果用户点击后退按钮onSaveInstance,系统不会调用它:

如果活动位于前台,并且用户单击“后退”按钮,则该活动将通过onPause(),onStop()和onDestroy()回调进行转换。 除了被销毁之外,该活动还从后堆栈中删除。

重要的是要注意,默认情况下,onSaveInstanceState()回调在这种情况下不会触发。

资料来源: 这里

片段的#onSaveInstanceState与活动生命周期严格相关
根据文档

在被杀死之前被调用以从活动中检索每个实例的状态

您只能使用片段操作,并且活动不会受到影响,因此绝对不能使用这种方法,也不应该这样做。

我的建议是通过接口使用某种持久性存储。 它可以在内存存储中(任何类型的单例,如注释中建议的那样。它的范围可能限于应用程序或活动或自定义情况(例如,您必须手动控制缓存的生命周期),并使用匕首注入),共享首选项基于存储,数据库存储。 测试是否遵循依赖性注入模式并使用MVP之类的结构模式很容易(但这不是这个问题的重点)

因此,将数据更改后存储在存储库中或onPause方法中(因为这是最后保证在屏幕消失时调用的数据)。 并将其还原到onCreate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM