预定计时器不起作用

时间:2016-07-05 10:52:26

标签: java android

我正在开发一款Android应用,我有countdown timer onFinish()这样做 -

double initial_time = 0.0;
double countup;

public void onFinish() {
                    startTimer();
                }

         public void startTimer(){
        //Start the scheduled timer
        Log.d("hi","crash app 0");
        Early_Delay_Display.setText(R.string.Departure_Delay);
        rootView.invalidate();
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        Log.d("hi","crash app 1" + initial_time);
                        countup = 0.0 + initial_time;
                        Log.d("hi","crash app 2" + initial_time + "---------" + countup);
                        Early_Delay_Time.setText(String.valueOf(countup));
                        rootView.invalidate();
                        initial_time = initial_time + 0.5;
                    }
                },
                1000, 30000//delay,period
        );
    }

基本上使用这个计时器,我想每30秒显示0.5,1.0,1.5但应用程序崩溃。

日志是 -

crash app 0
crash app 1 0.0
crash app 2 0.0---------0.0

此后应用程序崩溃

3 个答案:

答案 0 :(得分:0)

android中有特殊的CountDownTimer,所以你可以像提到here

一样使用它

答案 1 :(得分:0)

我猜您的活动已被破坏,然后计时器会让您的应用崩溃。

答案 2 :(得分:0)

我找到了答案。你永远不能更新线程的UI。相反,你可以这样做 -

public void startUpCounting(){
        //Start the scheduled timer
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                countup = 0.0 + initial_time;
                Log.d("hi","crash app 2" + initial_time + "---------" + countup);
                mHandler.obtainMessage(1).sendToTarget();
                initial_time = initial_time + 0.5;
            }
        }, 0, 1000);
    }

    public Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            Early_Delay_Time.setText(String.valueOf(countup));
            rootView.invalidate();
        }
    };