【问题标题】:Starting multiple instances of the same Activity from Service从 Service 启动同一个 Activity 的多个实例
【发布时间】:2011-09-30 13:40:20
【问题描述】:

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

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

曼菲斯特:

<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);

问题: 要从 Service 开始 Activity 我需要 FLAG_ACTIVITY_NEW_TASK 以某种方式从清单中取消 launchMode="standard",并只给我一个 Activity 即使我尝试启动多个不同的实例。 无论如何,我可以做到这一点吗?

【问题讨论】:

  • 无论用户在做什么,服务都能够生成有效的弹出对话框,我通常有点不舒服。我更喜欢任何需要通知我任何使用状态栏通知的应用程序developer.android.com/guide/topics/ui/notifiers/…
  • 我完全同意。但它在某种程度上是一个“内部”应用程序,它是一个“要求”,而不是我自己的决定。

标签: android android-manifest android-intent android-activity


【解决方案1】:

原来如此简单。根据文档,有标志FLAG_ACTIVITY_MULTIPLE_TASK

与 FLAG_ACTIVITY_NEW_TASK 结合使用以禁用将现有任务带到前台的行为。设置后,总是启动一个新任务来托管 Intent 的 Activity,而不管是否已经存在运行相同事物的任务。

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

【讨论】:

  • 我这样做了,intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);,但我仍然只得到一个实例。你能发布你的代码吗?
【解决方案2】:

服务将使用标志FLAG_ACTIVITY_NEW_TASK 来启动活动,但您可以在这里尝试:

  1. 在服务中设置您想要多个实例的活动的instance of the handler

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

【讨论】:

    【解决方案3】:

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

    否则我会使用普通的弹出窗口 (AlertViews) 而不是一直启动新活动。

    如果应用程序在后台运行,您可以在第一个弹出窗口中告诉用户您的应用程序发现了一个或多个故障,他应该激活应用程序以获取更多详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多