从后台恢复死应用程序使其表现得非常奇怪

时间:2016-07-08 07:47:47

标签: android android-fragments transactionmanager

我正在构建一个具有以下结构的应用程序。

MainActivity -> Fragment1
             -> Fragment2 -> Fragment3

这里Fragment1托管在FrameLayout的MainActivity上。当用户点击Fragment1上的任何选项时,我将切换到在ViewPager上托管Fragment3的Fragment2。

问题是,如果用户在没有关闭应用程序的情况下移动到Android主页,并且在一段时间内应用程序被Android杀死,并且用户尝试从最近的应用程序列表恢复应用程序,Fragment3将显示空白屏幕。 / p>

这是我用于Fragment事务的方法

public void requestChangeFragment(Fragment newFragment,String tag,Fragment oldFragment, int anim_in, int anim_out){
        if(isStopped()){
            return;
        }
        mFragmentManager = getSupportFragmentManager();
        android.support.v4.app.FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(anim_in,anim_out,anim_in,anim_out);
        fragmentTransaction.add(R.id.main_frame_layout, newFragment, tag);
        Log.i("FragMngr","Animations set in "+anim_in+" out "+anim_out);
        fragmentTransaction.addToBackStack(tag);
        int count = mFragmentManager.getBackStackEntryCount();
        String log="";
        fragmentTransaction.commit();
        for(int i=0;i<count;i++){
            android.support.v4.app.FragmentManager.BackStackEntry backStackEntry = mFragmentManager.getBackStackEntryAt(i);
            log += "count "+i+" name "+backStackEntry.getName()+"\n";
        }
        Log.d("FragMngr","BackStack trace after adding is\n "+log);
        if(oldFragment!=null) {
            if(oldFragment.isResumed()) {
                oldFragment.onPause();
            }
        }
        topFragment = newFragment;
    }
在[{1}}中实施requestChangeFragment()的帮助下,通过运行片段调用

interface

1 个答案:

答案 0 :(得分:0)

在做了一些研究之后,我发现问题是保存的实例,当app不使用时,每当android垃圾收集器杀死应用程序时,它就会存储片段的当前状态。因此,当我尝试恢复死应用程序时,它会在暂停应用程序之前移动所选的片段。但是片段没有任何必须从它的Main类接收的数据。

解决方案:在onCreate方法中清除MainActivity中保存的实例。或者,如果要在保存的实例状态中存储任何值,则执行与保存的实例状态相关的操作,清除该值,然后调用hjust