Android中實現定時器的四種方式

Android中實現定時器的四種方式

第一種方式利用Timer和TimerTaskhtml

一、繼承關係java

java.util.Timerandroid

基本方法ide

schedulethis

例如:spa

[java] view plaincopyprint?code

timer.schedule(task, delay,period);   
//delay爲long,period爲long:從如今起過delay毫秒之後,每隔period毫秒執行一次。   

 

schedule方法有三個參數htm

第一個參數就是TimerTask類型的對象,咱們實現TimerTask的run()方法就是要週期執行的一個任務;對象

第二個參數有兩種類型,第一種是long類型,表示多長時間後開始執行,另外一種是Date類型,表示從那個時間後開始執行;blog

第三個參數就是執行的週期,爲long類型。

 

二、

[java] view plaincopyprint?

TimerTask  task= new TimerTask() {  
         @Override  
         public void run() {  
                count++;  
                Log.i("MainActivity",count + "");  
         }  
};  

 

//如下是幾種調度task的方法: 

 

[java] view plaincopyprint?

//time爲Date類型:在指定時間執行一次。    
timer.schedule(task, time);    
//firstTime爲Date類型,period爲long,表示從firstTime時刻開始,每隔period毫秒執行一次。   
timer.schedule(task, firstTime,period);       
//delay 爲long類型:從如今起過delay毫秒執行一次。    
timer.schedule(task, delay);     
//delay爲long,period爲long:從如今起過delay毫秒之後,每隔period毫秒執行一次。   
timer.schedule(task, delay,period);   

 

注意:task應該在onDestory()中取消掉,不然可能發生崩潰 

 

三、用TimerTask定時進行某些操做的APP,即便退出了,TimerTask中依然會運行一會,可是不能長時間運行

 

第二種方式 使用CountDownTimer

 

一、Demo

 

[java] view plaincopyprint?

CountDownTimer cdt = new CountDownTimer(10000, 100) {  
    @Override  
    public void onTick(long millisUntilFinished) {  
        tv_hello.setText(millisUntilFinished + "");  
    }  
    @Override  
    public void onFinish() {  
          
    }  
};  
  
cdt.start();  
 

 

二、上面的例子是

每隔100毫秒執行onTick中的方法一次

直到執行完10000/100次爲止,最後會執行onFinish()中的方法

第三種方式 AlarmManager

demo:

 

 

[java] view plaincopyprint?

Intent intent2 = newIntent(ReadLogService.this,TestBroadcast.class);  
PendingIntent pd =PendingIntent.getBroadcast(getApplicationContext(), 0, intent2,PendingIntent.FLAG_ONE_SHOT);  
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  
long triggerTime =SystemClock.elapsedRealtime() + 5*1000;  
am.set(AlarmManager.ELAPSED_REALTIME,triggerTime, pd);  


第三種方式 AlarmManager

 

[java] view plaincopyprint?

handler.sendEmptyMessageDelayed(0, 4000);//啓動handler,實現4秒定時循環執行  
private Handler handler = new Handler(){  
public voidhandleMessage(android.os.Message msg) {  
                     
           if(isChange){  
                    //邏輯處理  
              
                        handler.sendEmptyMessageDelayed(0,4000);//4秒後再次執行  
            }  
  }  
};  
相關文章
相關標籤/搜索