保留的片段和活动在后台被杀死

时间:2019-03-22 15:33:17

标签: android kotlin android-lifecycle

在我的Activity内,我正在使用Fragment并将标志retainInstance设置为true的var retainedFragment = supportFragmentManager.findFragmentByTag(retainedTag) if (retainedFragment == null) { retainedFragment = BaseRetainedFragment<P>() supportFragmentManager.beginTransaction() .add(retainedFragment, retainedTag).commit() presenter = getPresenter() retainedFragment.setPresenter(presenter) fragment = retainedFragment } else { presenter = (fragment as BaseRetainedFragment<P>).getPresenter() } 来保存我的表示层类的实例。它可以很好地抵抗旋转变化。

Fragment

*在lateinit内部,我拥有presenter属性Activity

问题在于,当涉及到Android在后台杀死Fragment时,因为如您所见,我正在检查是否实际上有我的Fragment的实例。重新启动应用程序后,该进程在后台被Android杀死后,它将找到带有该标签的Fragment,但不会初始化我的属性(该属性已清除)。

我可以通过将savedInstanceState存储在Activity内的Presenter中来摆脱崩溃,但是仍然无法获取以前的Parcelable实例。我无法为自己的Presenter实现Fragment并将其实例保存在Parcelable中。

是否有一种方法可以从保留的片段中还原类的实例?甚至是带有状态的物体?

注意:我试图将状态仅保存为Type inference fail,但是在尝试获取savedInstanceState.getParcelable(key)时,我一直都在获取activity

感谢任何其他在后台$(document).ready(function() { $(".my_link").click( function() { console.log("requesting"); $.ajax({ url: 'https://www.gigablast.com/search?q=hello', type: 'GET', async: false, cache: false, timeout: 30000, beforeSend: function() { $('#response').text('Loading...'); }, error: function() { return true; }, success: function(msg) { console.log(msg); } }); }); }); 被杀死时保持状态的命题

1 个答案:

答案 0 :(得分:0)

我决定将ViewState中的最后一个Bundle保存在retained fragment内。效果不错,但当然也有缺点-我必须在我的每个@Parcelize类中添加ViewState,而且当您在其中包含更多指定类型时,它也会变得越来越难(需要自定义{{1} }实施。

因此,现在我正在创建Parceler的新实例,但立即推送初始化Presenter,这是我上一个实例。