歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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

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

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

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