当前位置: 代码迷 >> Android >> 求教Android计时器的有关问题
  详细解决方案

求教Android计时器的有关问题

热度:30   发布时间:2016-04-27 22:47:54.0
求教Android计时器的问题
小弟菜鸟一枚,最近在学做一个倒计时的应用(输入时间,点“开始倒计时”按钮就会开始倒计时并显示剩余时间),写出来之后在手机里运行,一按“开始倒计时”就会停止运行。
这是Handler和进行倒计时的startTime()方法。


我调试了一下,发现当运行到timer.schedule(task, 1000)的时候 i 并没有减小,跟mHandler相关的代码也没有运行。而在startTime()方法结束后 i 却减小了1。但是跟mHandler相关的代码也没有运行。之后程序就结束了。
也就是说是Handler出了问题。但是想不通到底是怎么了,希望哪位热心的大哥能指点一二。万分感谢!
------解决思路----------------------
TimerTask是一个线程吧?你好像没有调用start方法
------解决思路----------------------
schedule(TimerTask task, long delay)的注释:Schedules the specified task for execution after the specified delay。大意是在延时delay毫秒后执行task。并没有提到重复执行
  schedule(TimerTask task, long delay, long period)的注释:Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay。大意是在延时delay毫秒后重复的执行task,周期是period毫秒。
------解决思路----------------------

public class timerTask extends Activity {
        private int recLen = 11;
        private TextView txtView;
        Timer timer = new Timer();

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.timertask);
            txtView = (TextView) findViewById(R.id.txttime);
            timer.schedule(task, 1000, 1000);  // timeTask
        }

        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case 1:
                        txtView.setText("" + recLen);
                        if (recLen < 0) {
                            timer.cancel();
                            txtView.setVisibility(View.GONE);
                        }
                }
            }
        };
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                recLen--;
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            }
        };
    }

用这样的倒计时
  相关解决方案