2013-03-05 22 views
1

我想在特定時間喚醒活動。爲此,我(也)在引導完成的BroadcastReceiver上註冊了AlarmManager。Android:BroadcastReceiver上AlarmManager的生命週期

據我所知,只有服務可以在後臺永遠活着以喚醒活動。活動和BroadcastReceiver可能因無活動而死亡。

以下代碼我沒有運行服務。但是,它似乎正在工作(即使在24小時後啓動它,警報仍然有效)。這安全嗎?或者我應該啓動一項服務? 如果這是安全使用,這背後的邏輯是什麼?爲什麼BroadcastReceiver創建的AlarmManger不會被Android生命週期管理器破壞?

public class BootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 
      registerAlarm(context); 
     } 
    } 

    private void registerAlarm(Context context) 
    { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager am =(AlarmManager)context.getSystemService(Activity.ALARM_SERVICE); 
     long nextAlarm = System.currentTimeMillis() + 10000; //Some time later. 
     am.set(AlarmManager.RTC_WAKEUP, nextAlarm, pendingIntent); 
    } 
} 

回答

3

這是安全嗎?

AlarmManager不在乎你使用什麼樣的PendingIntent

用戶可能會也可能不會理解一個不知從何處出現的活動,但這是一個單獨的問題。

據我所知,只有服務可以永遠活着在後臺喚醒活動。

服務不會永遠持續下去。

活動和BroadcastReceiver可能因無活動而死亡。

編號您的進程可能「死於非活動狀態」,其中包括該進程中的所有組件。

爲什麼BroadcastReceiver創建的AlarmManger不會被Android生命週期管理器破壞?

因爲AlarmManager是系統服務,由操作系統維護,而不是由您的應用程序維護。

0

服務可以隨時被Android殺死。有關可用於觸發重複任務或長時間運行的任務的選項的詳細分析,請參閱此主題 - Scheduling recurring task in Android