我设法从我们的应用程序收到通知,以便在收到推送时显示在屏幕顶部的通知栏上。我的应用程序是一个视图层次结构。我的主屏幕带有列表视图。单击其中一个列表视图项时,将打开摘要屏幕(也包含列表视图),当单击其中一个摘要屏幕列表视图项时,将打开详细信息屏幕(层次结构中的最后一个屏幕)。用户可以点击后退按钮返回层次结构到主屏幕(或主屏幕)。
现在,我的应用程序和大多数应用程序都倾向于在后台运行,直到后退按钮被击中足够多次。我将Notification设置为在单击时启动mainScreen实例。问题是如果应用程序已经运行并且我这样做它会在所有其他屏幕上创建另一个主屏幕,所以当用户点击主屏幕上的后退按钮(期望退出应用程序)时他会回去当他离开我的应用程序在后台运行时,任何屏幕都处于活动状态。
所以,我可能会像这样回到层次结构: mainScreen - > detailsScreen - > summaryScreen - > mainScreen - > EXIT
当用户点击我的通知时,有没有办法可以杀死应用程序并启动一个新实例?这些通知点击通常如何处理?
希望这是有道理的。
感谢。
(Edtied:除了一个问题之外,一切都按预期工作。当我说detailsScreen(你的例子中的activityB)是层次结构中的最后一个时,我并不完全诚实。在这个屏幕上,用户实际上有选项查看地图
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=" + depLatitude + "," + depLongitude + "(" + name + ")"));
startActivity(intent);
当我按回地图时,理想的情况是返回到detailsScreen,但在这种情况下它会直接回到主屏幕。
有什么想法吗? )
答案 0 :(得分:1)
您可以使用重新排序到front属性并将相同的mainScreen实例放到顶部。 为了在后台进行后立即销毁您不想要的活动,请使用noHistory属性
MainActivity → Activity A → Activity B → Activity A
从MainActivity启动活动A
Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);
在此代码段中,我们将以标准模式启动活动A.
从活动A启动活动B
使用Intent标志启动活动B:来自活动A的Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
Intent intentB = new Intent(ActivityA.this, ActivityB.class);
intentB.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intentB);
从活动B启动活动A
当从活动B启动活动A时,活动的先前实例将重新排序到前端而不是创建新活动
Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);
没有历史记录
<activity android:noHistory="true" ../>
当用户离开活动时,是否应该从活动堆栈中移除活动并完成(调用其finish()方法)并且它在屏幕上不再可见 - 如果应该完成,则为“true”,并且如果不是“假”。默认值为“false”。 值“true”表示活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户将无法返回该任务。