我有一堆活动,并使用以下代码将主要活动置于“活动”状态:
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.putExtra("clearCache", true);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
问题在于,当我尝试检索clearCache
extra时,对getIntent().getExtras()
的调用返回null。
我的理解是因为我正在启动的活动已经在堆栈中,并且因为我设置了Intent.FLAG_ACTIVITY_CLEAR_TOP
标志,所以返回的Intent将是原始意图。
如何在我正在启动的活动中访问调用意图?
答案 0 :(得分:3)
在FLAG_ACTIVITY_CLEAR_TOP的google文档中,您应该每次都获得新的意图:
“如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此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
希望有所帮助!
答案 1 :(得分:0)
您只需通过传递特定的活动名称来更改您的代码,并保持其余代码不变,
Intent i = new Intent(MapActivity.this, MainActivity.class);
i.putExtra("clearCache", true);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);