1. 程式人生 > >Android 計時器Timer用法

Android 計時器Timer用法

1.計時器Timer基本用法,完成倒計時

public class TimeActivity extends AppCompatActivity {
    private Timer timer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer = new Timer(true);
        timer.schedule(timerTask, 1000, 1000); //延時1000ms後執行,1000ms執行一次
    }

    TimerTask timerTask = new TimerTask() {
        public void run() {
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);
        }
    };

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what==1){
                //回到主執行緒執行結束操作
                Log.e("=====", "結束計時");
            }
        }
    };
}

程式碼很簡單,先建立了 handler ,執行在主執行緒的操作;其次建立了 TimerTask ,在裡面執行傳送訊息的操作;最後,在 onCreate() 方法中初始化 Timer 物件並開始開始執行方法;

2.計時器Timer基本用法,打斷倒計時並重新開始計時

public class TimeActivity extends AppCompatActivity {
    private Timer mTimer; //計時器,每1秒執行一次任務
    private MyTimerTask mTimerTask; //計時任務,判斷是否未操作時間到達3s
    private long mLastActionTime; //上一次操作時間
    private Button button1;//重新開始計時按鈕

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.button1);
        //重新計時按鈕
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mLastActionTime = System.currentTimeMillis();
            }
        });
        //開始計時
        startTimer();
    }

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1) {
                //回到主執行緒執行結束操作
                Log.e("=====", "結束計時");
            }
        }
    };

    private class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            //3s未操作,則結束計時
            if (System.currentTimeMillis() - mLastActionTime > 3000) {
                //結束計時
                removeTimer();
                // 停止計時任務
                stopTimer();
            }
        }
    }

    //開始計時
    private void startTimer() {
        mTimer = new Timer(true);
        mTimerTask = new MyTimerTask();
        mTimer.schedule(mTimerTask, 0, 1000); //延時1000ms後執行,1000ms檢查一次
        // 初始化上次操作時間為登入成功的時間
        mLastActionTime = System.currentTimeMillis();
    }
    
    //倒計時完畢的操作
    private void removeTimer() {
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }

    // 停止計時任務
    private void stopTimer() {
        mTimer.cancel();
    }
}

上面程式碼也很簡單,主要有:

  • 計時器:每一秒都會執行一次計時器
  • 計時任務:主要是判斷時間有沒有超過三秒,超過三秒做操作
  • 重新計時按鈕:使計時器重新開始計時

結合上面的內容看程式碼應該非常簡單了~~