在Android中,AlarmManager提供了不受休眠狀態的系統定時功能,其一般使用方法如下。
1、創建一個BroadcastReceiver類的子類,接收定時器事件:
- public class MyReceiver extends BroadcastReceiver {
-
- ......
-
- }
2、在AndroidMenifest.xml中定義上述廣播事件接收類的定義:
- <receiver android:name=".MyReceiver">
- </receiver>
3、在程序中在需要時設置定時器:
- Intent intent = new Intent(context,MyReceiver.class);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP , SystemClock.elapsedRealtime() + ms, pendingIntent);
經過ms毫秒之後,MyReceiver會被調用,從而實現定時觸發。
但是,上述實現存在一個問題:如果設置定時器的進程被殺死之後,定時器事件就不會觸發。而在Android中,系統在需要時會自動終止後台進程,因此在定時過程中,進程被殺死的可能性是非常之大的,特別是在一些內存較少的設備中,基本上後台進程所設置的定時器很難被觸發。
為了讓定時器在進程被終止後還能觸發,需要對上述實現做一個小的修改:在AndroidMefest.xml中如下定義廣播接收類:
- <receiver android:name=".MyReceiver" android:process=":newinst">
- </receiver>