新版Android OS(4.4及更高版本)中的'FLAG_ACTIVITY_REORDER_TO_FRONT'

Sin*_*Raj 1 android android-activity back-stack

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

Sin*_*Raj 5

在Android 4.4及更高版本中,当FLAG_ACTIVITY_REORDER_TO_FRONT在Activity创建中使用flag 时,应用程序行为异常.主要问题是,有些时候Activity会冻结状态,当导航到另一个活动键盘不能正常工作时(键盘显示但是用户不能输入任何文本区域),没有膨胀菜单,或者应用程序导航以最小化状态.

我认为这个问题与后台堆栈和活动流有关,当启动器活动(在我的应用程序中,SplashScreenActivity是一个启动器)完成时,子活动在使用FLAG_ACTIVITY_REORDER_TO_FRONT重新启动先前的Activity 时会导致一些问题.因此,在这种情况下,不要杀死启动器或父活动startActivityForResult(childAcivityIntent, requestcode),并在onActivityResult调用时使用&kill父活动启动下一个活动.并且还要记住在子活动和父活动中不要使用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();
}
Run Code Online (Sandbox Code Playgroud)