【发布时间】:2014-12-10 19:02:37
【问题描述】:
我从具有待处理意图的通知开始活动,并带有返回堆栈。这是我的制作方法
TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
stackBuilder.addNextIntentWithParentStack(intent);
stackBuilder.editIntentAt(0).putExtra(GCMUtils.NEXT_INTENT,BaseFragment.FragmentId.DIALOGS).
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
resultPendingIntent = stackBuilder.getPendingIntent(requestCode, PendingIntent.FLAG_ONE_SHOT);
然后从活动A(以intent开始)开始活动B并完成活动A
Bundle extras = activity.getIntent().getExtras();
boolean isFromNotification = extras != null &&
extras.getBoolean(GCMUtils.NOTIFICATION_INTENT, false);
boolean noBackStack = isFromNotification &&
Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB;
if (activity.isTaskRoot() || noBackStack) {
Intent intent = activity instanceof ActionBarActivity ?
((ActionBarActivity)activity).getSupportParentActivityIntent() :
NavUtils.getParentActivityIntent(activity);
if (noBackStack) {
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
}
activity.startActivity(intent);
activity.finish();
} else {
activity.onBackPressed();
}
之后,我使用后退按钮退出我的应用程序(活动 B 是主要活动)。现在,如果打开最近的应用程序并单击我的应用程序,它将恢复活动 A 而不是活动 B。它在 android 2.3 上重现。我不明白为什么它会恢复 A 而不是 B。我错过了什么?
【问题讨论】:
-
澄清!当我使用返回按钮和主页按钮时效果不同。如果是主页按钮,它会按预期恢复活动 B。只有在返回按钮的情况下,它才会恢复活动 A。也许它会保存启动应用程序的意图并在从最近的应用程序启动时重用它?附:应强制停止应用程序以重现此行为。
-
你的说法毫无意义。 BACK 和 HOME 做完全不同的事情 当你按下 BACK 时,这会完成当前的 Activity 并返回到堆栈上的前一个 Activity。如果没有以前的活动,您的应用程序将退出。但是,按 HOME 不会在任何活动上调用
finish()。它只是将您的任务移至后台。当您将现有任务从后台带到前台时(通过从最近的任务列表中选择它),您的任务应该处于与您离开时完全相同的状态(即:相同的 Activity 应该在顶部) . -
另见stackoverflow.com/questions/19813652/…也许这解释了你所看到的。
标签: android android-intent android-pendingintent android-2.3-gingerbread back-stack