Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作

源码下载:

https://download.csdn.net/download/qq_31939617/10380793 下载

下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。
需要注意的问题主要有两点:
1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句
2、只能在UI主线程中更新控件/组件。在其他线程中,更新控件/组件

MainActivity.class

package com.example.sz.timer;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    private static String  TAG = "TimerDemo";

    private TextView mTextView = null;
    private Button mButton_start = null;
    private Button mButton_pause = null;

    private Timer mTimer = null;
    private TimerTask mTimerTask = null;

    private Handler mHandler = null;

    private static int count = 0;
    private boolean isPause = false;
    private boolean isStop = true;

    private static int delay = 1;  //1s
    private static int period = 1;  //1s

    private static final int UPDATE_TEXTVIEW = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = (TextView)findViewById(R.id.mytextview);
        mButton_start = (Button)findViewById(R.id.mybutton_start);
        mButton_pause = (Button)findViewById(R.id.mybutton_pause);


        mButton_start.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                if (isStop) {
                    Log.i(TAG, "开始");
                } else {
                    Log.i(TAG, "停止");
                }

                isStop = !isStop;

                if (!isStop) {
                    startTimer();
                }else {
                    stopTimer();
                }

                if (isStop) {
                    mButton_start.setText("开始");
                } else {
                    mButton_start.setText("停止");
                }
            }
        });

        mButton_pause.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                if (isPause) {
                    Log.i(TAG, "继续");
                } else {
                    Log.i(TAG, "暂停");
                }

                isPause = !isPause;

                if (isPause) {
                    mButton_pause.setText("继续");
                } else {
                    mButton_pause.setText("暂停");
                }
            }
        });

        mHandler = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case UPDATE_TEXTVIEW:
                        updateTextView();
                        break;
                    default:
                        break;
                }
            }
        };
    }

    private void updateTextView(){
        mTextView.setText(String.valueOf(count));
    }

    private void startTimer(){
        if (mTimer == null) {
            mTimer = new Timer();
        }

        if (mTimerTask == null) {
            mTimerTask = new TimerTask() {
                @Override
                public void run() {
                    Log.i(TAG, "count: "+String.valueOf(count));
                    sendMessage(UPDATE_TEXTVIEW);

                    do {
                        try {
                            Log.i(TAG, "sleep(1000)...");
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                        }
                    } while (isPause);

                    count ++;
                }
            };
        }

        if(mTimer != null && mTimerTask != null )
            mTimer.schedule(mTimerTask, delay, period);

    }

    private void stopTimer(){

        if (mTimer != null) {
            mTimer.cancel();
            mTimer = null;
        }

        if (mTimerTask != null) {
            mTimerTask.cancel();
            mTimerTask = null;
        }

        count = 0;

    }

    public void sendMessage(int id){
        if (mHandler != null) {
            Message message = Message.obtain(mHandler, id);
            mHandler.sendMessage(message);
        }
    }
}

activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/mytextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="0" />

    <Button
        android:id="@+id/mybutton_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="开始" />

    <Button
        android:id="@+id/mybutton_pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="暂停" />


LinearLayout>

源码下载:

https://download.csdn.net/download/qq_31939617/10380793 下载

你可能感兴趣的:(android)