让我详细解释一下; 我收到通知,此通知会在两个案例中打开B activity
。
案例:
案例-1
我点击通知,然后用B activity
打开case-1
。当我press back
我想转到A activity
并杀死B activity
时。我不再需要B activity
了。在不使用flags
的情况下,一切都很简单。当我在B activity
上并从此处按两次后,它会A activity
,然后关闭app
。我的麻烦在于,如果我从电话的导航按钮打开app
(无法记住此按钮的名称)应用程序是从B activity
打开的。这不是我的预期。我想打开A activity
。不想再看B activity
了。
案例-2
我点击通知,然后点击B activity
case-2
。当我press back
我希望将A activity
带到前面时,不会创建任何新内容。如果我按回B activity
,两次并关闭应用,然后再次从手机的导航按钮重新打开应用,则需要从A activity
打开应用。
那么我怎样才能正确地做到这一点,我试图使用flags
(我已经阅读过文档)但是无法开始工作。
当我打开flags
的{{1}} B activity
方法onBackPress
按我想要的方式B activity
时,我应该使用A activity
答案 0 :(得分:4)
这应该可以通过添加
来实现android:launchMode="singleTask"
到Manifest中的A活动,然后你就可以从B活动onBackPressed打开一个活动,你只能在堆栈中有一次A.
如果它没有按照你想要的方式工作,你可以创建一个扩展Activity并在静态对象中处理堆栈的抽象类,然后A& B必须扩展这个新类
答案 1 :(得分:3)
试试这个
x
答案 2 :(得分:2)
试试这个
android:launchMode="singleTask" in android manifest file
答案 3 :(得分:2)
您可以通过添加FLAG_ACTIVITY_REORDER_TO_FRONT
来实现此目的 Intent i = new Intent(context, Activity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
答案 4 :(得分:2)
你可以尝试这个isTaskRoot()这将返回B是root
如果是,则启动A
另外,你可以完成B
B活动
@Override
public void onBackPressed() {
if (isTaskRoot()) {
//call A which is not exist
Intent i =new Intent(B.this,A.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}else {
//Finish B if A Already Exixt
finish();
}
}
您可以在通知单击
上调用B活动如果 A 存在,那么你可以完成B ,否则你可以启动 A
如果设置FLAG_ACTIVITY_CLEAR_TOP,正在启动的活动已经在当前任务中运行,那么将不会启动该活动的新实例,而是关闭其上的所有其他活动,并将此Intent传递给(现在在最前面)作为新意图的旧活动。
答案 5 :(得分:2)
将它放在ActivityB onBackPressed上:
Intent i = new Intent(ActivityB.this , ActivityA.calss);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
finish();
finish();
使ActivityB在打开ActivityA后完成。因此,在打开ActivtyA后,ActivityB将关闭。
使用这个组合标志,它会做你想要的。它将关闭堆栈中的所有活动,并保持目标活动。如果存在活动实例,它将使用它并调用OnNewInstance
,否则将创建新的活动。
答案 6 :(得分:1)
如果这是使用的活动B的唯一实例,则可以将标志noHistory添加到活动B的清单
android:noHistory="true"
这将停止将活动B添加到后台堆栈,这也可以通过在调用活动B时使用Intent Flag FLAG_ACTIVITY_NO_HISTORY来动态生成。
至于活动A在活动B被杀死时开始活动@Quentin Menini的答案是,如果这是您希望访问活动A或意图标记意图的唯一方式,则在清单中设置单个任务活动将会起作用。 @Naimish Vinchhi建议的FLAG_ACTIVITY_REORDER_TO_FRONT将在这种情况下产生预期效果。
https://developer.android.com/reference/android/content/Intent.html 链接以查看所有可能的Intent标志
https://developer.android.com/guide/topics/manifest/activity-element.html 所有可能的清单活动选项的链接