Android fragments 在系统破坏活动(恢复内存)后出现碎片的Viewpager

Android fragments 在系统破坏活动(恢复内存)后出现碎片的Viewpager,android-fragments,memory-management,android-viewpager,destroy,Android Fragments,Memory Management,Android Viewpager,Destroy,我有一个3页的viewpager,每页上有一个片段(包含内部片段)。我的片段和活动通过保存的引用直接相互通信(我不使用接口或回调)。我还禁用了旋转,我的应用程序目前只在纵向模式下使用。我调用setOffscreenPageLimit(3),但从未调用setRetainInstance() 应用程序在正确销毁后启动时工作正常 但是,当应用程序被系统破坏后启动应用程序以恢复内存和资源时(我通过暂停应用程序并启动一些繁重的应用程序来实现),viewpager不会“正常”启动/附加片段,一切都会出错。

我有一个3页的viewpager,每页上有一个片段(包含内部片段)。我的片段和活动通过保存的引用直接相互通信(我不使用接口或回调)。我还禁用了旋转,我的应用程序目前只在纵向模式下使用。我调用setOffscreenPageLimit(3),但从未调用setRetainInstance()

应用程序在正确销毁后启动时工作正常

但是,当应用程序被系统破坏后启动应用程序以恢复内存和资源时(我通过暂停应用程序并启动一些繁重的应用程序来实现),viewpager不会“正常”启动/附加片段,一切都会出错。 我到处都有NullPointerException。例如,我对片段中的活动(保存在onAttach中)的引用通常为null。我过去常常可以运行以提供时间,但即使在2秒之后,尽管我的跟踪表明在OnResume之前的所有片段回调函数都已被调用,但isAdded()返回false和getActivity()在片段内部返回null。即使对于应该首先显示的片段也是如此。有时一些片段被正确添加

当然,上述两种场景之间的区别在于,在非工作场景中,onCreate(Bundle)或onRestoreInstanceState(Bundle)中会发生某些情况。可能有人试图重用片段或其他内容。因此,一种解决方法是停用活动状态的保存,如下所示:

@Override
protected void onSaveInstanceState(Bundle outState) {
    //super.onSaveInstanceState(outState);
}
这个解决方法很有效,但我以后无法使用onRestoreInstanceState


如果您遇到过此问题,您还发现了哪些更好的解决方案?提前感谢。

我遇到了与您相同的问题,发现您的代码片段对我非常有用!谢谢!