缘起
首先,笔者的主Activity中包含了多个Fragment,通过show、hide来切换展示。当笔者切换到其他的APP,操作一段时间后,返回到当前APP,有很大几率会出现Fragment重叠现象。
缘由
首先,在Activity的生命周期中,当Activity不在前台展示时,如果此时其他的APP需要使用内存,系统会杀掉该APP的进程,当用户重新进入该APP时,系统会重新创建Activity。
Activity不在前台展示时会保存Fragment的状态,当系统重新创建Activity时会恢复之前保存的Fragment的状态。
缘解
方案一:在Activity的onCreate方法中判断savedInstanceState是否为空,不为空则使用系统保存的Fragment。
public class MainActivity extends AppCompatActivity { Fragment fragment; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { fragment = getSupportFragmentManager().findFragmentByTag("fragment"); } else { fragment = new Fragment(); getSupportFragmentManager().beginTransaction().add(R.id.frameLayout, fragment, "fragment").commit(); } } }
方案二:在Activity的onCreate方法中,调用super方法时直接传null,不使用保存的状态。
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(null); }
参考资料:
Android fragment 重叠问题——通过hide,show方式导致的解决方法