2010-12-18 92 views
0

我有一个主要活动A1正在运行。它设置在t1时刻熄灭的闹钟a1。接收a1警报并创建服务S1的警报接收器AR1。服务S1创建对话活动A2并且还设置在时间t2时熄灭的警报a2。另一个警报接收器AR2捕获a2警报,我需要AR2来终止对话活动A2。如何杀死服务中的活动

我无法看到服务如何获得活动的句柄以杀死它或调用其finish()方法。

回答

1

首先,从BroadcastReceiver弹出的活动被认为是很差的形式,除非在特殊情况下,因为它会中断用户,无论他们在做什么。我现在假设您正在编写Android的第1,337闹钟应用程序,因此根据AlarmManager报警弹出BroadcastReceiver的活动是一个合理的选择(假设用户通过偏好你的应用程序)。

鉴于此,您不能从服务中“杀死”活动。

但是,如果活动正在运行,您可以向该活动发送一条消息,然后在该活动未运行时将其启动。

例如,您可以发送有序广播。让该活动为您的广播实施高优先级BroadcastReceiver,并使其更新以反映新警报。在其他地方(例如,在清单中)实施低优先级的BroadcastReceiver,并在活动不可用时启动对话活动,或根据用户偏好采取其他措施(例如,只显示Notification)。

+0

如果该活动的启动模式为“标准”,如何向当前运行的活动发送消息? – 2011-09-20 18:25:07

+0

@CamilleSévigny:好的。按照答案中描述的配方。这是一个示例实现:https://github.com/commonsguy/cw-advandroid/tree/master/Broadcast/Ordered – CommonsWare 2011-09-20 22:46:33