2010-12-18 91 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