我有一个服务正在执行一些后台工作人员,然后我需要启动一个显示服务处理结果的活动。但有可能活动从服务开始多次。现在,只有在活动不活动的情况下,我才会启动此活动。检查是否在服务中启动活动
有什么可能性和如何做到这一点?如果你不介意的话,示例代码会很好。
谢谢!
我有一个服务正在执行一些后台工作人员,然后我需要启动一个显示服务处理结果的活动。但有可能活动从服务开始多次。现在,只有在活动不活动的情况下,我才会启动此活动。检查是否在服务中启动活动
有什么可能性和如何做到这一点?如果你不介意的话,示例代码会很好。
谢谢!
您应该将您的活动的launchMode
更改为androidManifest.xml文件中的singleTask
。
此属性的默认值为standard
,它允许运行任意数量的实例。
“singleTask”和“singleInstance”活动只能开始一项任务。它们始终处于活动堆栈的根部。而且,该设备一次只能保存一个活动实例 - 只有一个这样的任务。 [...]
“singleTask”和“singleInstance”模式在一个方面也各不相同:“singleTask”活动允许其他活动成为其任务的一部分。它始终是其任务的根源,但其他活动(必然是“标准”活动和“单一活动”)可以启动到该任务中。另一方面,“单一实例”活动不允许其他活动成为其任务的一部分。这是该任务中唯一的活动。如果它启动另一个活动,那么该活动将分配给其他任务 - 就好像FLAG_ACTIVITY_NEW_TASK在意图中一样。
退房的Android Developers' Guide了更详细的解释(报价从那里为好)
<activity android:name=".activity.YourActivity"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
android:clearTaskOnLaunch="false"
android:finishOnTaskLaunch="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>