我有一個主要活動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