AlarmManager(全局定時器/鬧鐘)指定時長或以週期形式執行某項操做

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);
相關文章
相關標籤/搜索