每当有来电时,我都试图在来电屏幕上显示用户信息。所以我有一个广播接收器监听来电,它启动意图服务,随后启动一个活动(使用主题对话框)。
现在,只要有来电,我的活动对话框就会弹出并按预期显示。
问题:当活动对话框已经在屏幕上并且发生来电时,没有新的活动对话框包含新信息。我想只要有实例,Android 就不会创建新实例。所以看起来我的问题是“创建一个活动的多个实例”。
请注意,我正在使用FLAG_NEW_TASK从意图服务开始活动。
每当有来电时,我都试图在来电屏幕上显示用户信息。所以我有一个广播接收器监听来电,它启动意图服务,随后启动一个活动(使用主题对话框)。
现在,只要有来电,我的活动对话框就会弹出并按预期显示。
问题:当活动对话框已经在屏幕上并且发生来电时,没有新的活动对话框包含新信息。我想只要有实例,Android 就不会创建新实例。所以看起来我的问题是“创建一个活动的多个实例”。
请注意,我正在使用FLAG_NEW_TASK从意图服务开始活动。
谷歌文档说:
“使用此标志时,如果您现在正在启动的 Activity 的任务已经在运行,则不会启动新的 Activity;相反,当前任务将简单地以上次的状态被带到屏幕的前面在。”
所以,如果你想开始一个新的活动,那么就不要只使用这个标志,你应该将它与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:launchModeactivity
属性,在文件标记中使用所需选项(即根据您的需要)声明此属性manifest
。
希望这能解决问题。
根据文档使用标志 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 一起使用将导致每个活动实例被创建为单独的任务,因此您可以弹出不同的对话框。
只需将以下标志添加到您的Intent
.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);