首页 > 解决方案 > 应用进程被杀死时如何保存演示者实例

问题描述

问题:幸存的应用程序进程被杀死(以正确的方式保存演示者对象实例,以便以后可以重用)

这是一个使用 MVP 架构的简单示例片段。

class xFragment : BaseFragment() {

    private lateinit var xPresenter: xPresenter
    override lateinit var xAdapter: BaseAdapter

    override fun onResume() {
        super.onResume()
        xPresenter.view = this
        xAdapter = xAdapter(
            xPresenter,
            this,
            this
        )
        recyclerView.adapter = contentAdapter
    }

    override fun onPause() {
        super.onPause()
    }

    override fun onDestroy() {
        if (xPresenter.view != null) xPresenter.view = null
        super.onDestroy()
    }

    override fun onDeleteButtonClicked() {
        x.onDeleteButtonClicked()
    }

    companion object {
        @JvmStatic fun createInstance(presenter: xPresenter): xFragment {
            val fragment = xFragment()
            fragment.xPresenter = presenter
            return fragment
    }
}

我读到保存任何内容的最佳解决方案是将其保存onPause()onResume(). 如您所见,当我在“createInstance”方法中创建我的片段时,我传递了我的 Presenter。应该如何保存我的xPresenter,以便我以后可以在 onResume 中保留它并继续进行而不会出错?

标签: androidmvp

解决方案


如果您的进程被杀死,您只能恢复在调用Activity.onSaveInstanceState(Bundle)期间保存在 bundle 中的内容。所以你不能保存演示者实例,直到它实现可序列化/可打包接口(只有原始类型或可序列化/可打包对象可以存储在包中)。您可以在Activity.onCreate(Bundle)Activity.onRestoreInstanceState(Bundle)中恢复的所有已保存数据。


推荐阅读