2011-12-05 26 views
1

我设法从我们的应用程序获取通知,只要它收到推送,就会出现在屏幕顶部的通知栏中。我的应用程序是一个视图层次结构。我有我的主屏幕与列表视图。当其中一个列表视图项被点击时,它会打开一个摘要屏幕(也包含一个列表视图),当其中一个摘要屏幕列表视图项被点击时,它会打开一个详细信息屏幕(层次结构中的最后一个屏幕)。用户可以点击后退按钮将层次结构返回到主屏幕(或主屏幕)。从Android通知栏启动应用程序。如何开始一个新的应用程序实例,而不是恢复后台进程?

现在,我的应用程序和大多数应用程序都倾向于在后台运行,直到后退按钮被击中足够多的时间。我设置我的通知来点击时启动mainScreen的一个实例。事情是,如果应用程序已经运行,我这样做,它会在所有其他屏幕上创建另一个主屏幕,所以当用户点击主屏幕上的后退按钮(期望退出应用程序)时,他会返回当他离开我的应用程序在后台运行时,无论屏幕是否处于活动状态。

所以,我可能回去了这样的层次: mainScreen - > detailsS​​creen - > summaryScreen - > mainScreen - >退出

有没有一种方法,我可以只杀应用程序,并开始一个新的实例当用户点击我的通知?这些通知点击通常如何处理?

希望这是有道理的。

谢谢。当我说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。

任何想法? )

回答

1

您可以使用重新排序前置属性并将mainScreen的同一实例置顶。 对于来自MainActivity

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

摧毁你不尽快为他们在后台使用去想活动noHistory属性

MainActivity → Activity A → Activity B → Activity A 

启动活动A在此代码段中,我们正在开展活动A在标准模式。从活动

发射活动B A

活动B启动意图标志:意图。FLAG_ACTIVITY_REORDER_TO_FRONT从活动从活动B A

Intent intentB = new Intent(ActivityA.this, ActivityB.class); 
intentB.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(intentB); 

发射活动一

当活性A被从活动启动B中的活动的前一个实例被重新排序在前,而不是创建一个新的

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

没有历史

<activity android:noHistory="true" ../> 

当用户离开它并且它不再在屏幕上可见时,是否应该从活动堆栈中移除活动并完成(调用其finish()方法) - 如果应该完成,则为“true”如果不是,则为“假”。默认值是“false”。 值为“true”意味着活动不会留下历史记录。它不会保留在任务的活动堆栈中,因此用户将无法返回到它。

+0

感谢您的出色答案,但我不确定这是如何适用于我想要做的。当用户点击后退按钮时,完成()不会被调用,除非我将noHistory设置为true?我想让活动保持活跃状态​​,直到用户点击后退按钮。但是,例如,如果用户在detailsS​​creen上点击了HOME按钮,并且推入时,他通过通知栏启动应用程序,我希望属于我的应用程序的任何和所有背景活动都被终止,并且mainScreen的新实例活动被创建,然后从这里开始流程。 – PaulG

+0

这就是我想说的,把重新排序前MainActivity的标志和没有历史的其余活动。只要主屏幕被按下,没有历史标志的活动就会被破坏,当你从通知栏启动主要活动时,同样的MainActivity被重新排序到前面。 –

+0

我看到了,我会试试看看它是如何发生的。 – PaulG

相关问题