2011-09-30 100 views
1

我想从Service开始同一个Activity类的多个实例。我这样做的原因是因为我有一个Service每天运行一次“扫描”,如果发现任何故障,它应该显示每个故障的弹出窗口。从服务启动同一活动的多个实例

我开始的Activity更像是Dialog,它有一个Dialog theme来显示有关故障的信息。

Manfiest:

<activity 
    android:name=".ui.dialogs.MalfunctionActivity" 
    android:theme="@style/MyDialog" 
    android:launchMode="standard"> 

意图从Service启动活动:

Intent displayMalf=new Intent(this, MalfunctionActivity.class); 
    displayMalf.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(displayMalf); 

问题:开始从一个ServiceActivity,我需要这在某种程度上从取消launchMode="standard"FLAG_ACTIVITY_NEW_TASK清单,并且即使我尝试启动多个不同实例,也只给我一个Activity。 无论如何我可以做到这一点?

+2

我通常有点不舒服一个服务能够生成什么是有效的弹出式对话,无论用户在做什么。我更喜欢任何需要通知我使用状态栏通知的应用程序http://developer.android.com/guide/topics/ui/notifiers/notifications.html – Squonk

+1

我完全同意。但它是某种“内部”应用程序,它是一个“要求”,并非我自己的决定。 –

回答

5

这很简单。这里是根据文档的标志FLAG_ACTIVITY_MULTIPLE_TASK

与FLAG_ACTIVITY_NEW_TASK配合使用,以便将禁用现有任务的前景的行为。设置时,总是会启动一个新任务来托管Intent的“活动”,而不管已有任务是否已运行相同的任务。

正是我所需要的。感谢和抱歉回答我的问题。这不是一种习惯。 :)

+0

我这样做,'intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);'但我仍然只得到一个实例。你可以发布你的代码吗? – camelCaseCoder

0

我猜你的应用程序在后台运行,即使应用程序目前不在前台,也会显示弹出窗口,对吧?

否则,我会使用正常弹出的(AlertViews),而不是始终开始新的活动。

如果应用程序在后台运行,你可以与第一弹出告诉用户你的应用程序已找到一个或多个故障,他应该激活更多细节

应用
2

服务将拿旗FLAG_ACTIVITY_NEW_TASK开始活动,但是在这里你可以尝试这样的:

  1. 一套您想要的多个实例活动的instance of the handler,在服务。

  2. 当您希望活动的新实例使用handler.sendMessage(msg)并且在您的活动中接收到此消息时,请再次启动此活动。

+0

黑客..但它可能工作。谢谢。 –