歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中使用AlarmManager需注意設置進程屬性

Android中使用AlarmManager需注意設置進程屬性

日期:2017/3/1 10:07:57   编辑:Linux編程

在Android中,AlarmManager提供了不受休眠狀態的系統定時功能,其一般使用方法如下。

1、創建一個BroadcastReceiver類的子類,接收定時器事件:

  1. public class MyReceiver extends BroadcastReceiver {
  2. ......
  3. }

2、在AndroidMenifest.xml中定義上述廣播事件接收類的定義:

  1. <receiver android:name=".MyReceiver">
  2. </receiver>

3、在程序中在需要時設置定時器:

  1. Intent intent = new Intent(context,MyReceiver.class);
  2. PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  3. AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
  4. alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP , SystemClock.elapsedRealtime() + ms, pendingIntent);

經過ms毫秒之後,MyReceiver會被調用,從而實現定時觸發。

但是,上述實現存在一個問題:如果設置定時器的進程被殺死之後,定時器事件就不會觸發。而在Android中,系統在需要時會自動終止後台進程,因此在定時過程中,進程被殺死的可能性是非常之大的,特別是在一些內存較少的設備中,基本上後台進程所設置的定時器很難被觸發。

為了讓定時器在進程被終止後還能觸發,需要對上述實現做一個小的修改:在AndroidMefest.xml中如下定義廣播接收類:

  1. <receiver android:name=".MyReceiver" android:process=":newinst">
  2. </receiver>
Copyright © Linux教程網 All Rights Reserved