我们正在使用Fragments,并且不需要在Activity重新创建时自动恢复这些Fragments。但Android每次调用Activity::onCreate(Bundle savedInstanceState)
-〉super.onCreate(savedInstanceState)
时都会恢复Fragments,即使我们对这些Fragments使用setRetainInstance(false)。
此外,在这些Fragments
中,Fragment.performCreateView()
是直接调用的,而没有经过Fragment::onAttach()
等等。另外,在恢复的Fragment
中,一些字段为空...
有人知道如何防止Android恢复碎片吗?
另外,我们知道,在重新创建配置更改活动的情况下,可以通过添加ndroid:configChanges="orientation|screenSize|screenLayout
到清单来完成。但是,在自动内存清理的情况下,重新创建活动怎么办?
9条答案
按热度按时间azpvetkf1#
最后,我们向活动中添加了:
它抑制“活动”的创建/重新创建周期中任何已保存的数据,并避免自动重新创建片段。
ui7jx7zq2#
@goRGon的回答对我来说非常有用,但是当有一些更多的信息需要在重新创建后转发到您的活动时,这样的使用会导致严重的问题。
这里是改进的版本,只删除“碎片”,但保留每一个其他参数。
从bundle中移除的ID是
android.support.v4.app.FragmentActivity
类的一部分,作为FRAGMENTS_TAG
字段。当然,它可能会随时间而更改,但这不是预期的。cl25kdpy3#
我在使用
TransactionTooLargeException
时遇到了一个问题。所以谢天谢地,在使用tolargetool后,我发现碎片(android:support:fragments)一直在内存中,事务变得太大了。所以最后我这样做了,效果很好。编辑:我把它添加到活动中。在我的情况下,我有一个单一的活动应用程序和多个片段。
vwkv1x7d4#
使用已接受答案中描述的方法时获得带ViewPager的NPE的用户,请覆盖
第一个月
方法和调用
super.onRestoreInstanceState(null);
而不是。
ubbxdtey5#
我删除了Activity的onCreate中的片段。
bjp0bcyl6#
对于使用
ViewPager
的应用程序,我在创建onCreate()
中的片段之前删除了它们。基于此线索:Remove all fragments from container,我们有:
wsxa1bj17#
使用这个为androidx
yv5phkfx8#
这对我很有效
eanckbw99#
视图层次结构不会自动恢复。因此,在
Fragment.onCreateView()
或Activity.onCreate()
中,必须恢复所有视图(从xml或以编程方式)。每个包含片段的ViewGroup都必须具有与第一次创建时相同的ID。创建视图层次结构后,Android会恢复所有片段并将其视图放入正确的ViewGroup中,这要归功于ID。假设Android记住了片段所在的ViewGroup的ID。这发生在onCreateView()
和onStart()
之间的某个地方。