【发布时间】:2010-12-18 20:20:05
【问题描述】:
我有一个主要活动 A1 正在运行。它设置在时间 t1 响起的警报 a1。一个警报接收器 AR1 捕获 a1 警报并创建服务 S1。服务 S1 创建对话活动 A2 并设置在时间 t2 响起的警报 a2。另一个警报接收器 AR2 捕获到 a2 警报,我需要 AR2 来终止对话活动 A2。
我看不到服务如何获取活动的句柄以杀死它或调用它的 finish() 方法。
【问题讨论】:
标签: android
我有一个主要活动 A1 正在运行。它设置在时间 t1 响起的警报 a1。一个警报接收器 AR1 捕获 a1 警报并创建服务 S1。服务 S1 创建对话活动 A2 并设置在时间 t2 响起的警报 a2。另一个警报接收器 AR2 捕获到 a2 警报,我需要 AR2 来终止对话活动 A2。
我看不到服务如何获取活动的句柄以杀死它或调用它的 finish() 方法。
【问题讨论】:
标签: android
首先,从BroadcastReceiver 弹出活动被认为是糟糕的形式,除非在不寻常的情况下,因为它会在用户正在做的任何事情中打断用户。目前,我假设您正在为 Android 编写第 1,337 个闹钟应用程序,因此基于AlarmManager 闹钟从BroadcastReceiver 弹出一个活动是一个合理的选择(假设用户请求通过您应用中的偏好设置)。
鉴于此,您不能从服务中“杀死”活动。
但是,如果 Activity 正在运行,您可以向它发送消息,如果它没有运行,则启动它。
例如,您可以发送有序广播。让活动为您的广播实现高优先级BroadcastReceiver,并让它自行更新以反映新警报。在其他地方(例如,在您的清单中)实现低优先级BroadcastReceiver,并让它启动对话活动以防活动不可用,或根据用户偏好采取一些其他操作(例如,简单地显示Notification )。
【讨论】: