3

我有一堆活动,并使用以下代码将主要活动带入“活动”状态:

Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.putExtra("clearCache", true);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

问题是,当我尝试检索clearCache额外内容时,调用getIntent().getExtras()返回 null。

我的理解是,因为我正在启动的活动已经在堆栈上,并且因为我设置了Intent.FLAG_ACTIVITY_CLEAR_TOP标志,所以返回的 Intent 将是原始意图。

如何在我正在启动的活动中访问调用意图?

4

2 回答 2

4

在 FLAG_ACTIVITY_CLEAR_TOP 的谷歌文档中,您每次都应该获得新的意图:

“如果设置了,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)旧活动作为新意图。”

...

“上面示例中当前正在运行的活动 B 实例将在其 onNewIntent() 方法中接收您在此处启动的新意图,或者自行完成并以新意图重新启动。如果它已将其启动模式声明为”多个”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式或如果设置了 FLAG_ACTIVITY_SINGLE_TOP,则此 Intent 将被传递到当前实例的 onNewIntent() 。”

有关更多详细信息,请查看此处:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

希望有帮助!

于 2013-03-25T14:15:48.387 回答
0

您只需通过传递特定的 Activity 名称来更改代码并保持其余代码不变,

Intent i = new Intent(MapActivity.this, MainActivity.class);
                        i.putExtra("clearCache", true);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
于 2013-03-25T14:25:22.140 回答