2013-01-15 112 views
2

我试图在传入呼叫时显示来电屏幕上的用户信息。因此,我有一个广播接收机收听来电,它启动意向服务,随后启动一个活动(,主题对话框为)。活动的多个实例

现在,只要有来电,我的活动对话框就会弹出并按预期显示。

问题:当活动对话框已经在屏幕上并发生传入呼叫时,没有新的活动对话框和新信息。我想,无论何时出现实例,Android都不会创建新的实例。所以看起来我的问题是“创建活动的多个实例”。

请注意,我正在使用FLAG_NEW_TASK从意向服务开始活动。

+0

你是在谈论一个Activity或一个应用程序,因为在Android上,一个应用程序只能同时运行一次。 – Nickolaus

+0

@Nickolaus:主题为Dialog的活动。 –

回答

3

谷歌文档说:

FLAG_ACTIVITY_NEW_TASK

“当使用此标志,如果一个任务已在运行的活动 你现在开始,然后一个新的活动将不会启动; 取而代之的是,当前任务只会以其最后一个状态显示在 屏幕的前面。“

所以,如果你想开始新的新鲜活动则根本不使用此标志而已,你应该FLAG_ACTIVITY_CLEAR_TASK使用它预期的效果。

例如:

// Sets the Activity to start in a new, empty task 
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_CLEAR_TASK); 

如果上面的解决方案是不是你需要什么,然后看看 android:launchMode属性,与所需的选项声明此属性(即根据自己的需要)在activity标签manifest文件。

希望这能解决问题。其中根据文档

+0

不工作,它只是更新屏幕上的当前活动。 –

+0

解答已更新。 –

+0

如果仍然无法正常工作,则可能需要在startActivity(intent)之前调用finish()。 –

2

使用标志FLAG_ACTIVITY_MULTIPLE_TASK:

Used in conjunction with FLAG_ACTIVITY_NEW_TASK to disable the behavior of bringing an existing task to the foreground. When set, a new task is always started to host the Activity for the Intent, regardless of whether there is already an existing task running the same thing. 

与FLAG_ACTIVITY_NEW_TASK一起使用此标志将导致作为单独的任务创建的每个活动实例,因此,你可以有不同的对话框弹出窗口。

2

只需将下列标志添加到您的Intent

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 
      | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);