1、getActivity()空指针
2、异常:Can not perform this action after onSaveInstanceState
3、Fragment重叠异常-----正确使用hide、show的姿势
4、Fragment嵌套的那些坑
5、未必靠谱的出栈方法remove()
6、多个Fragment同时出栈的深坑BUG
7、深坑 Fragment转场动画
一、getActivity()空指针
原因:activity在可能发生内存回收状态时会调用 onSaveInstanceState方法保存状态, Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity。
解决办法:
1、Fragment强引用Activity( 有引起内存泄露的风险,但是相比Crash,这种做法可以接受的)
protected Activity mActivity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mActivity= (Activity) context;
}
@Override
public void onDetach() {
super.onDetach();
mActivity= null;
}
2、从Activity保存/恢复状态入手
第1种、不保存fragment的状态: 在Activity中重写onSaveInstanceState方法,将
//super.onSaveInstanceState(outState);
注释掉,让其不再保存Fragment的状态,达到fragment随MyActivity一起销毁的目的。
第2种 、重建时清除已经保存的fragment的状态:在恢复Fragment之前把Bundle里面的fragment状态数据给清除。方法如下:
if(savedInstanceState!= null){
String FRAGMENTS_TAG = "android:support:fragments";
savedInstanceState.remove(FRAGMENTS_TAG);
}