AlarmManager的使用機制有的稱呼爲全局定時器,有的稱呼爲鬧鐘。經過對它的使用,我的以爲叫全局定時器比較合適,其實它的做用和Timer有點類似。都有兩種類似的用法:(1)在指定時長後執行某項操做(2)週期性的執行某項操做 java
AlarmManager對象配合Intent使用,能夠定時的開啓一個Activity,發送一個BroadCast,或者開啓一個Service. ide
下面的代碼詳細的介紹了兩種定時方式的使用: this
(1)在指定時長後執行某項操做 spa
//操做:發送一個廣播,廣播接收後Toast提示定時操做完成 Intent intent =new Intent(Main.this, alar mreceiver.class); intent.setAction("short"); PendingIntent sender= PendingIntent.getBroadcast(Main.this, 0, intent, 0); //設定一個五秒後的時間 Calendar calendar=Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 5); AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE); alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); //或者如下面方式簡化 //alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender); Toast.makeText(Main.this, "五秒後alarm開啓", Toast.LENGTH_LONG).show();//注意:receiver記得在manifest.xml註冊
public static class alarmreceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if(intent.getAction().equals("short")){ Toast.makeText(context, "short alarm", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(context, "repeating alarm", Toast.LENGTH_LONG).show(); } } }
(2)週期性的執行某項操做 code
Intent intent =new Intent(Main.this, alarmreceiver.class); intent.setAction("repeating"); PendingIntent sender=PendingIntent .getBroadcast(Main.this, 0, intent, 0); //開始時間 long firstime=SystemClock.elapsedRealtime(); AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE); //5秒一個週期,不停的發送廣播 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP , firstime, 5*1000, sender);
AlarmManager的setRepeating()至關於Timer的Schedule(task,delay,peroid);有點差別的地方時Timer這個方法是指定延遲多長時間 xml
之後開始週期性的執行task; 對象
AlarmManager的取消:(其中須要注意的是取消的Intent必須與啓動Intent保持絕對一致才能支持取消AlarmManager) get
Intent intent =new Intent(Main.this, alarmreceiver.class); intent.setAction("repeating"); PendingIntent sender=PendingIntent .getBroadcast(Main.this, 0, intent, 0); AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE); alarm.cancel(sender);