关于#Android#的问题,加一个到0停止的语句,如何解决?

Android想加一个到零停止的语句,自己的尝试都错误,求解答

package com.example.time;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

    private EditText inputet;//输入时间
    private Button getTime;//得到输入的时间
    private Button startTime;//点击开始自动减少时间的按钮
    private Button stopTime;//点击开始停止自动减少时间的按钮
    private TextView time;//当前时间
    private int i = 0;
    private Timer timer = null;//计时器
    private TimerTask timerTask = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initviews();//初始化视图
        setOnclick();//设置视图的点击监听
    }

    private void setOnclick() {
        getTime.setOnClickListener(this);
        startTime.setOnClickListener(this);
        stopTime.setOnClickListener(this);
    }

    private void initviews() {
        inputet = (EditText) findViewById(R.id.inputtime);
        getTime = (Button) findViewById(R.id.gettime);
        startTime = (Button) findViewById(R.id.starttime);
        stopTime = (Button) findViewById(R.id.stoptime);
        time = (TextView) findViewById(R.id.time);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.gettime:
                time.setText(inputet.getText().toString());//当前时间
                i = Integer.parseInt(inputet.getText().toString());//当前输入时间
                break;
            case R.id.starttime://开始自动减时
                startTime();
                break;
            case R.id.stoptime://停止自动减时
                stopTime();
                break;
        }
    }
    private Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            time.setText(msg.arg1+"");
            startTime();
            if(time.equals(0))
                timer.cancel();
            timer = null;
        };
    };


    /**
     * 开始自动减时
     */
    private void startTime() {
        if(timer==null){
            timer = new Timer();
        }

        timerTask = new TimerTask() {

            @Override
            public void run() {
                i--;//自动减1
                Message message = Message.obtain();
                message.arg1=i;
                mHandler.sendMessage(message);//发送消息
            }
        };
        timer.schedule(timerTask, 1000);//1000ms执行一次
    }


    /**
     * 停止自动减时
     */
    private void stopTime() {
        if(timer!=null)
            timer.cancel();
        timer = null;
    }
   
}

你看看你的handleMessage里面写了startTime,你可以增加一个标识符,当你调用了timer.cancel,加个flag=true, 如果flag==true,handleMessage里面不要再调用startTime方法了。
还有time.cancel之后,也要调用一下handler.removeCallbackAndMessage(null) 移除全部消息

 if(time.equals(0))
                timer.cancel();
            timer = null;

这块有问题 导致你每次timer都被重置了 if不加{}默认只执行下一行。