我使用的是一个简单的片段导航系统,可以很容易地在屏幕旋转时保留片段的实例。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = LayoutInflater.from(getContext()).inflate(getLayoutId(), null, false);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final XmlResourceParser parser = getContext().getResources().getLayout(getLayoutId());
try {
int type;
while ((type = parser.next()) != XmlPullParser.START_TAG &&
type != XmlPullParser.END_DOCUMENT) {
}
} catch (XmlPullParserException | IOException e) {}
final AttributeSet attrs = Xml.asAttributeSet(parser);
view.setLayoutParams(container.generateLayoutParams(attrs));
return view;
}
片段使用setRetainInstance(true)
,这部分代码应修复此处提到的内存泄漏:Further understanding setRetainInstance(true)
此外,当屏幕旋转时重新启动活动时,片段将存储在包中,然后从包中恢复,并将一个片段设置为可见。在app start上加载所有片段并将它们保存在内存中是否正确,或者只在需要时才加载它们?