【问题标题】:'FLAG_ACTIVITY_REORDER_TO_FRONT' in new flavors of Android OS(4.4 & later)'FLAG_ACTIVITY_REORDER_TO_FRONT' 在新版本的 Android 操作系统(4.4 及更高版本)中
【发布时间】:2015-07-09 11:43:57
【问题描述】:
最近,我遇到了重新启动已经在后台堆栈中的 Activity 的问题。标志FLAG_ACTIVITY_REORDER_TO_FRONT 是管理此问题的最佳解决方案。但在 Android 4.4 及更高版本中它不能正常工作(有时 Activity 视图被冻结或应用程序自身最小化,菜单不会膨胀以重新启动 Activity 或键盘不允许在文本区域输入内容)但在以前的版本这个标志重新启动的活动,并从后台堆栈中删除。详情请查看this link。
【问题讨论】:
标签:
android
android-activity
back-stack
【解决方案1】:
在 Android 4.4 及更高版本中,当在 Activity 创建中使用 FLAG_ACTIVITY_REORDER_TO_FRONT 标志时,应用程序会出现异常。主要问题是,有时活动会冻结状态,当导航到另一个活动时键盘工作不正常(显示键盘但用户无法在文本区域输入任何内容),没有膨胀菜单,或应用程序导航以最小化状态。
我认为这个问题与回栈和活动流有关,当启动器活动(在我的应用程序中,SplashScreenActivity 是一个启动器)完成时,子活动在使用时会导致一些问题FLAG_ACTIVITY_REORDER_TO_FRONT 重新启动之前的 Activity。所以在这种情况下,不要杀死启动器或父活动并使用startActivityForResult(childAcivityIntent, requestcode) 开始下一个活动,并在onActivityResult 调用时杀死父活动。还要记住不要在孩子和家长活动中使用singleInstance 或singleTop 标志。
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();
}
【解决方案2】:
我也遇到了同样的问题:
当我通过子活动设置Intent 标志FLAG_ACTIVITY_REORDER_TO_FRONT 回到父Activity 时,有时应用程序在带有Android Marshmallow 的Nexus5 中被最小化。
苦苦挣扎了3天,终于把activity的Launch模式改成了Single Task。
现在我的应用程序运行良好。