APP被系统回收后重新回到前台,Fragment重新加载,关于Bundle操作的问题

问题遇到的现象和发生背景

网上找到一篇帖子说在应用退到后台后,系统会在内存不足时将应用回收掉,再次启动应用会出现Activity中的Fragment重叠现象,其实出现问题的原因是这样的,在回收应用回收前FragmentActivity会调用onSaveInstanceState(Bundle outState) 方法,保存当前的Fragment的状态。所以需要在FragMent里的onCreate里将savedInstanceState相应的Parcelable重新置为空,跟了一下代码确实也是和描述的一致,但是现在不知道savedInstanceState.utParcelable(@Nullable String key, @Nullable Parcelable value) 第一个参数应该怎么写,或者从哪获取呢?

原文链接:https://blog.csdn.net/songmingzhan/article/details/84452610

  @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
//        super.onSaveInstanceState(outState);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        if(savedInstanceState!=null)
        {
            if (BuildConfig.DEBUG) Log.d("TabViewPtz", "这是恢复的页面"+savedInstanceState);

            savedInstanceState.putParcelable(这里的key应该写什么,从哪获得,null);

        }
        else {
            if (BuildConfig.DEBUG) Log.d("TabViewPtz", "这是正常的创建");
        }

        super.onCreate(savedInstanceState);
    }

我想要达到的结果

安卓开发不久,这应该是个基础问题,希望各位不吝赐教,感激不尽

fragment显示重叠,那就是多次添加导致的。
回到前台后,判断一下fragment的状态,如果为空。重新创建,add;已经添加过,直接show

提供你一个简单粗暴的解决方案,重写onSaveInstanceState,然后将保存的fragments置null。这样每次被系统回收就是正常的fragment加载创建过程,不需要考虑复用等一些复杂的逻辑。简单粗暴,至于原理,过两天会出一篇博客介绍这一部分,可以关注我哈

@Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        //直接将保存的`Fragment`置null
        outState.putParcelable("android:support:fragments", null);
        outState.putParcelable("android:fragments",null);
    }

这个其实是涉及到生命周期的理解问题,你理解了生命周期回调函数的作用,你就会明白!


bundle只是一个传递参数的桶而已,你需要保存什么状态,通过bundle来传递即可!