『Android』Handler實現(xiàn)循環(huán)定時及其他定時、延時方式實現(xiàn)

android基本定時器和延時的用法,總結(jié)一下比較簡潔的模式,方便簡單地在程序中直接調(diào)用。

一、定時循環(huán)

1. handler.postDelayed+Runnable

  • 首先創(chuàng)建一個Handler對象
Handler handler=new Handler();
  • 然后創(chuàng)建一個Runnable對象
Runnable runnable=new Runnable(){    
    @Override    
    public void run() {        
    // TODO Auto-generated method stub        
    //要做的事情,這里再次調(diào)用此Runnable對象,以實現(xiàn)每兩秒實現(xiàn)一次的定時器操作       
     handler.postDelayed(this, 2000);   
}}; 
  • 主線程中調(diào)用,使用PostDelayed方法,兩秒后調(diào)用此Runnable對象
handler.postDelayed(runnable, 2000);
  • ★ 關(guān)閉此定時器,可以這樣操作
handler.removeCallbacks(runnable); 

2. handler+timer+timeTask

  • 首先創(chuàng)建一個Handler對象
Handler handler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
         if (msg.what == 1){
            //do something

         }
         super.handleMessage(msg);
     }
 };
  • 然后創(chuàng)建一個Timer 對象
Timer timer = new Timer();
     TimerTask timerTask = new TimerTask() {
         @Override
         public void run() {
             Message message = new Message();
             message.what = 1;
             handler.sendMessage(message);
     }
};
  • 主線程中調(diào)用,使用schedule方法
//延時1s,每隔500毫秒執(zhí)行一次run方法
timer.schedule(timerTask,1000,500);

3. Thread+handler

  • 首先創(chuàng)建一個Handler對象
Handler handler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
         if (msg.what == 1){
            //do something

         }
         super.handleMessage(msg);
     }
 };
  • 然后創(chuàng)建一個Timer 對象
class ScheduleThread extends Thread {//這里也可用Runnable接口實現(xiàn)         
        @Override
         public void run() {
             while (true){
                 try {
                    //每隔1s執(zhí)行一次
                     Thread.sleep(1000);                     
                     Message msg = new Message();
                     msg.what = 1;
                     handler.sendMessage(msg);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
 
             }
         }
}
  • 主線程中調(diào)用
new Thread(new ScheduleThread ()).start();




二、延時

1. Handler的postDelayed方法:

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        //do something
    }
}, 1000);    //延時1s執(zhí)行

2. Timer + TimerTask方法:

timer = new Timer();
timer.schedule(new TimerTask() {                   
   @Override
   public void run() {
       //do something
   }
},1000);//延時1s執(zhí)行

3. Thread方法:

new Thread(new Runnable() {
    @Override
    public void run() {
       try {
           Thread.sleep(1000);//延時1s
           //do something

       } catch (InterruptedException e) {
            e.printStackTrace();
       }
    }
}).start();

new Thread(new MyThread()).start();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容