我有一个主要活动A1正在运行。它设置在t1时刻熄灭的闹钟a1。接收a1警报并创建服务S1的警报接收器AR1。服务S1创建对话活动A2并且还设置在时间t2时熄灭的警报a2。另一个警报接收器AR2捕获a2警报,我需要AR2来终止对话活动A2。如何杀死服务中的活动
我无法看到服务如何获得活动的句柄以杀死它或调用其finish()方法。
我有一个主要活动A1正在运行。它设置在t1时刻熄灭的闹钟a1。接收a1警报并创建服务S1的警报接收器AR1。服务S1创建对话活动A2并且还设置在时间t2时熄灭的警报a2。另一个警报接收器AR2捕获a2警报,我需要AR2来终止对话活动A2。如何杀死服务中的活动
我无法看到服务如何获得活动的句柄以杀死它或调用其finish()方法。
首先,从BroadcastReceiver
弹出的活动被认为是很差的形式,除非在特殊情况下,因为它会中断用户,无论他们在做什么。我现在假设您正在编写Android的第1,337闹钟应用程序,因此根据AlarmManager
报警弹出BroadcastReceiver
的活动是一个合理的选择(假设用户通过偏好你的应用程序)。
鉴于此,您不能从服务中“杀死”活动。
但是,如果活动正在运行,您可以向该活动发送一条消息,然后在该活动未运行时将其启动。
例如,您可以发送有序广播。让该活动为您的广播实施高优先级BroadcastReceiver
,并使其更新以反映新警报。在其他地方(例如,在清单中)实施低优先级的BroadcastReceiver
,并在活动不可用时启动对话活动,或根据用户偏好采取其他措施(例如,只显示Notification
)。
如果该活动的启动模式为“标准”,如何向当前运行的活动发送消息? – 2011-09-20 18:25:07
@CamilleSévigny:好的。按照答案中描述的配方。这是一个示例实现:https://github.com/commonsguy/cw-advandroid/tree/master/Broadcast/Ordered – CommonsWare 2011-09-20 22:46:33