我有一个包含3个页面的viewpager和每个页面上的一个片段(包含内部片段)。我的片段和活动通过保存的引用直接相互通信(我不使用接口或回调)。我也停用了旋转,我的应用程序目前仅用于纵向模式。我调用setOffscreenPageLimit(3),我从不调用setRetainInstance()。
应用程序在正确销毁后启动时可以正常运行。
但是,当应用程序被系统销毁以恢复内存和资源(我通过暂停我的应用程序并启动一些繁重的应用程序)来启动应用程序时,viewpager不会“正常”启动/附加片段搞砸了。 我到处都有nullpointerexceptions。例如,我对片段中的活动(保存在onAttach中)的引用通常为null。我曾经使用Runnable来提供时间,但即使在2秒之后,虽然我的跟踪指示所有片段回调函数直到onResumed已被调用,但isAdded()返回false并且getActivity()在片段内返回null。即使是应该首先显示的片段。有时会正确添加一些片段。
当然,上述两种情况之间的区别在于,在非工作场景中,某些事情发生在onCreate(Bundle)或onRestoreInstanceState(Bundle)中。可能会尝试重用碎片或其他任何东西。因此,解决方法是停用活动状态的保存,如下所示:
@Override
protected void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState);
}
此解决方法有效,但我将来失去使用onRestoreInstanceState的可能性。
如果您遇到过这个问题,您还找到了哪些其他更好的解决方案?提前谢谢。