' FLAG_ACTIVITY_REORDER_TO_FRONT'在新的Android OS风格(4.4及更高版本)

时间:2015-07-09 11:43:58

标签: android android-activity back-stack

最近,我遇到了重新启动已经在后台堆栈中的Activity的问题。标志FLAG_ACTIVITY_REORDER_TO_FRONT是管理此问题的最佳解决方案。但是在Android 4.4&以后它不能很好地工作(有些时候活动视图正在冻结或应用程序最小化,菜单没有膨胀以重新启动活动或键盘不允许输入文本区域的东西)但是在以前的版本中,此标志重新启动Activity,并从后栈中删除。有关详细信息,请查看this link

2 个答案:

答案 0 :(得分:5)

在Android 4.4&之后,在活动创建中使用 FLAG_ACTIVITY_REORDER_TO_FRONT 标志时,应用程序出现异常。主要问题是,有些时候Activity会冻结状态,当导航到另一个活动键盘不能正常工作时(显示键盘但用户无法输入任何文本区域),没有&#39 ; t inflate菜单,或Application导航以最小化状态。

我认为这个问题与后台堆栈和活动流程有关,当启动器活动(在我的应用程序中,SplashScreenActivity是一个启动器)完成时,子活动在使用 FLAG_ACTIVITY_REORDER_TO_FRONT时会导致一些问题重新启动之前的活动。因此,在这种情况下,不要杀死发射器或父母活动&使用startActivityForResult(childAcivityIntent, requestcode)启动下一个活动,&在onActivityResult通话时杀死父母活动。并且还要记住,不要在儿童和儿童中使用singleInstancesingleTop标志。家长活动。

private void onStartNextActivity() {
        Intent mIntent= new Intent(SplashscreenActivity.this, ChildActivity.class);
                 mIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
       startActivityForResult(mIntent, 1111);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1111)
            finish();
}

答案 1 :(得分:2)

我也面临同样的问题:
当我通过从子活动设置Activity标记Intent返回到父FLAG_ACTIVITY_REORDER_TO_FRONT时,有时候应用程序在使用Android Marshmallow的Nexus5中最小化。

我挣扎了3天,最后我将activity的启动模式更改为Single Task

现在我的申请工作正常。