Android 定時器 延時器

通過實際項目的練習(xí),掌握了幾種android基本定時器和延時的用法,這里我想總結(jié)一下作為自己的收獲,下面列出的是比較簡潔的模式,方便簡單地在程序中直接調(diào)用。

1.CountDownTimer

public class ZpTimerActivity extends Activity {  
  
    private CountDownTimer mTimer;  
  
    @Override  
    protected void onCreate(@Nullable Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
  
        setContentView(R.layout.activity_timer);  
        initView();  
    }  
  
    private void initView() {  
        if (mTimer == null) {  
            mTimer = new CountDownTimer((long) (5 * 1000), 1000) {  
  
                @Override  
                public void onTick(long millisUntilFinished) {  
                    if (!ZpTimerActivity.this.isFinishing()) {  
                        int remainTime = (int) (millisUntilFinished / 1000L);  
                        Log.e("zpan","======remainTime=====" + remainTime);  
                    }  
                }  
  
                @Override  
                public void onFinish() {  
                    Log.e("zpan","======onFinish=====");  
                }  
            };  
            mTimer.start();  
        }  
    }  
  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        if (mTimer != null) {  
            mTimer.cancel();  
            mTimer = null;  
        }  
    }  
}  

Log:

12-06 16:31:17.809 20276-20276/com.example.zpdemo E/zpan: ======remainTime=====4  
12-06 16:31:18.811 20276-20276/com.example.zpdemo E/zpan: ======remainTime=====3  
12-06 16:31:19.812 20276-20276/com.example.zpdemo E/zpan: ======remainTime=====2  
12-06 16:31:20.813 20276-20276/com.example.zpdemo E/zpan: ======remainTime=====1  
12-06 16:31:22.769 20276-20276/com.example.zpdemo E/zpan: ======onFinish=====  

三種常用的定時器
1.Handler類的postDelayed方法:

Handler mHandler = new Handler();
                 Runnable r = new Runnable() {

                    @Override
                    public void run() {
                            //do something
                            //每隔1s循環(huán)執(zhí)行run方法
                            mHandler.postDelayed(this, 1000);
                    }
                };


主線程中調(diào)用:  mHandler.postDelayed(r, 100);//延時100毫秒

2.用handler+timer+timeTask方法:

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);
        }
    };

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };
 主線程中調(diào)用:timer.schedule(timerTask,1000,500);//延時1s,每隔500毫秒執(zhí)行一次run方法

3.Thread+handler方法:

Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                //do something
            }
            super.handleMessage(msg);

        }
    };

    class MyThread extends Thread {//這里也可用Runnable接口實現(xiàn)
        @Override
        public void run() {
            while (true){
                try {
                    Thread.sleep(1000);//每隔1s執(zhí)行一次
                    Message msg = new Message();
                    msg.what = 1;
                    handler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }
    }
主線程中調(diào)用:new Thread(new MyThread()).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 MyThread()).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);//延時1s
                    //do something
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).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ù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

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

  • 一直以來就想寫技術(shù)博文了,之前有在csdn寫過,最近一段時間csdn不知道什么問題,無法寫博客。平時也喜歡...
    bruce1990閱讀 3,047評論 0 4
  • 定時器: 1.Handler類的postDelayed方法: Handler mHandler = new Han...
    清風(fēng)笑_e92c閱讀 390評論 0 0
  • 在日常開發(fā)中,我們經(jīng)常要延時等待(如網(wǎng)絡(luò)請求,UI更新完)然后做一些事情,或者是做一些周期性的處理。這個時候就要求...
    愛民謠的coderMrZhou閱讀 1,313評論 0 3
  • 清晨蘇醒過來,打卡,看過一章書,去洗漱,梳妝整理好,換上運動鞋,快速跑去洗飯盒,將昨晚留下的飯菜裝好,帶上兩小袋奧...
    麥琪簡書閱讀 134評論 0 2
  • 原創(chuàng) 最近在看張愛玲的《傾城之戀》,書中寫道:范柳原在細雨迷蒙的碼頭上迎接她。他說她的綠色玻璃雨衣像一只瓶,又...
    磁性物種閱讀 1,122評論 0 1

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