繁体   English   中英

从Android通知栏启动应用。 如何启动应用程序的新实例而不是恢复后台进程?

[英]Launching app from Android Notification Bar. How to start a fresh instance of application rather than resume background process?

每当收到推送请求时,我都设法从我们的应用程序获得通知,以显示在屏幕顶部的通知栏上。 我的应用程序是视图层次结构。 我的主屏幕带有列表视图。 单击这些列表视图项之一时,它会打开一个摘要屏幕(也包含一个列表视图),而单击摘要屏幕列表视图项中的一个时,它将打开一个详细信息屏幕(层次结构中的最后一个屏幕)。 用户可以单击“后退”按钮将层次结构返回到主屏幕(或主屏幕)。

现在,我的应用程序以及与此相关的大多数应用程序倾向于在后台运行,直到后退按钮被按下足够的次数为止。 我将Notification设置为在单击mainScreen的实例时启动它。 问题是,如果该应用程序已经在运行,那么我会在所有其他屏幕上创建另一个主屏幕,因此,当用户单击主屏幕上的“后退”按钮(希望退出该应用程序)时,他将返回当他让我的应用在后台运行时,无论屏幕处于活动状态。

因此,我可能会像这样备份层次结构:mainScreen-> detailsS​​creen-> summaryScreen-> mainScreen-> EXIT

当用户单击我的通知时,有没有办法我可以杀死应用程序并启动一个新实例? 通常如何处理这些通知点击?

希望这是有道理的。

谢谢。

(有趣的是:除了一个问题,一切都按预期方式工作。当我说detailScreen(示例中的activityB)是层次结构中的最后一个时,我并不完全诚实。在此屏幕上,用户实际上可以选择查看地图

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
                Uri.parse("geo:0,0?q=" + depLatitude + "," + depLongitude + "(" + name + ")"));
                startActivity(intent);

当我在地图上按回时,理想的情况是使其返回到detailsS​​creen,但在这种情况下,它又回到了主屏幕。

有任何想法吗?

您可以使用“重新排序”将属性置于最前面,并使mainScreen的相同实例到达顶部。 对于销毁您不希望在后台运行的活动,请使用noHistory属性

MainActivity → Activity A → Activity B → Activity A

从MainActivity启动活动A

Intent intentA = new Intent(MainActivity.this, ActivityA.class);
startActivity(intentA);

在此代码段中,我们以标准模式启动活动A。

从活动A启动活动B

活动B是通过活动A的Intent标志启动的: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”如果不。 默认值为“ false”。 值为“ true”表示该活动将不会留下历史痕迹。 它不会保留在任务的活动堆栈中,因此用户将无法返回到该任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM