android - 定时器错误倒计时

标签 android timer handler countdown

我的计时器有问题。然后我按下处理程序的开始按钮值显示 -22406914:0-51 而不是倒计时。下面是代码(我用这个帮助帮助自己:http://android-developers.blogspot.com/2007/11/stitch-in-time.html)。我不知道我在哪里犯了错误...

public class biegi extends Activity {
TextView Todleglosc, Tpredkosc, Tczas;
ImageView Ibiegacz;
Button clear, startstop;
LocationManager locationManager;
Location lokacjaPoczatkowa;
String providerName;
boolean start;
private long startTime;
private Handler mHandler = new Handler();

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.biegi);
inicjuj();
actionbuttonsc();
} // oncreate

private Runnable mUpdateTimeTask = new Runnable() {
        public void run() {
             final long start = startTime;
               long millis = SystemClock.uptimeMillis() - start;
               int seconds = (int) (millis / 1000);
               int minutes = seconds / 60;
               seconds     = seconds % 60;

               if (seconds < 10) {
                   Tczas.setText("" + minutes + ":0" + seconds);   
               } else {
                   Tczas.setText("" + minutes + ":" + seconds);            
               }     
               mHandler.postAtTime(this,start + (((minutes * 60) + seconds +     1) * 1000));               
        }           
    };

public void inicjuj (){
Todleglosc=(TextView) findViewById(R.id.odleglosc);
Tpredkosc=(TextView) findViewById(R.id.predkosc);
Tczas=(TextView) findViewById(R.id.czas);
Ibiegacz=(ImageView) findViewById(R.drawable.biegacz);
clear=(Button) findViewById(R.id.clear);
startstop=(Button) findViewById(R.id.button_bieg_start_stop);
start=false;
}


public void actionbuttonsc()
{
clear.setOnClickListener(new View.OnClickListener()
        {
    public void onClick(View v) {
    Tczas.setText("00:00:00");

    }
});

startstop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {   
        if (start==false)
        {
            Tczas.setText("00:00:01");
            startTime = System.currentTimeMillis();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mHandler.postDelayed(mUpdateTimeTask, 100);
            start=true;
        }

else if (start==true)
    {
        Tczas.setText("00:00:00");
        mHandler.removeCallbacks(mUpdateTimeTask);
        start=false;                        
    }}});
}
}

最佳答案

你设置startTime使用 currentTimeMillis ( startTime = System.currentTimeMillis(); ),然后使用 uptimeMillis 读取它(long millis = SystemClock.uptimeMillis() - start;)。

这是我会做的:

// Change this:
long millis = SystemClock.uptimeMillis() - start;
// .. to this:
long millis = System.currentTimeMillis() - start;

关于android - 定时器错误倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872612/

相关文章:

javascript - 如何在 javascript、css 中更改计时器的外观?

haskell - 'readFile'的异常处理

运行 ipython notebook 时引发异常

android - 如何在java代码中为按钮设置圆角半径?

来自所有 Activity 的Android通用网络服务类

delphi - 使用 `TStopWatch` 而不使用 `free`

java - 如何在接收启动后 20 分钟执行服务?

java - Android Listview 和 textWatcher

android - 如何在 RecyclerView 中逐项滚动

javascript - 为 Angular JS 应用程序制作 10 秒计时器