处理程序随机停止更新setText

时间:2018-01-23 22:53:26

标签: java android android-fragments

我制作了一个可运行的秒表,它可以在大多数情况下正确地更新时间。但有时当我切换到另一个片段然后切换回来时,它会随机运行几秒钟(从2到15),然后停止。处理程序仍在运行,但文本未更新。当我再次切换片段并且它跳到正确的时间然后恢复滴答时。这很奇怪,因为每次切换片段时它都不会这样做,但它经常发生。

//code in fragment 1 class
 start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (!MainActivity.timeOn && spinner.getSelectedItem()!=null){

                MainActivity.timeOn=true;
                if(MainActivity.timeOn) {
                    MainActivity.paused = false;
                    MainActivity.stopTime=false;
                    MainActivity.StartTime = SystemClock.uptimeMillis();
                    MainActivity.handler.postDelayed(MainActivity.runnable, 0);


                }

            }}
    });

//code in main Activity class
  public static Runnable runnable = new Runnable() {

    public void run() {

        MillisecondTime = SystemClock.uptimeMillis() - StartTime;

        UpdateTime = TimeBuff + MillisecondTime;

        Seconds = (int) (UpdateTime / 1000);

        Minutes =1 +( Seconds / 60);

        Hours = Minutes / 60;

        Seconds = Seconds % 60;

        MilliSeconds = (int) (UpdateTime % 1000);

        minuteSum = (Hours * 60) + Minutes;
        minuteSumDaily = (Hours * 60) + Minutes;


        textView.setText("" + Hours + ":"
                + String.format("%02d", Minutes) + ":"
                + String.format("%02d", Seconds));


        handler.postDelayed(this, 0);


    }

};

1 个答案:

答案 0 :(得分:0)

要回答您的问题,请将您的处理程序回调移至服务。即使您的用户离开您的应用程序撰写文本,电子邮件或拨打电话,这也将保持准确的时间。

但是,您尝试连续运行Runnable ,您只需每秒运行一次(例如1000),但硬编码static navigationOptions={ title:'Categories', headerLeft: (<View></View>), }; 毫秒会引入一个小的每次执行都会出错。您可以编写一种方法来检查偏移量是什么并相应地进行调整......但是ChronometerCountDownTimer类可以方便地为您完成此操作。您应该切换到使用其中一个或复制其回调方法。

(是的,CountDownTimer指向错误的方向但只是反转数学。)

最后,请查看DateUtils.formatElapsedTime()。它需要几毫秒并输出特定于区域设置的&#34; HH:mm:ss&#34;。