[英]Handler randomly stops updating setText
我做了一個可運行的秒表,它可以正常工作並在大多數時間正確更新時間。 但是有時候,當我切換到另一個片段然后又切換回它時,它將隨機運行幾秒鍾(從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);
}
};
要回答您的問題,請將Handler回調移至Service。 即使您的用戶離開您的應用程序來編寫文本或電子郵件或撥打電話,這也將保持准確的時間。
但是,您嘗試連續運行Runnable,則只需要每秒運行一次(例如handler.postDelayed(this, 1000);
),但是硬編碼1000
毫秒將在每次執行時引入一個小錯誤。 您可以編寫一種方法來檢查偏移量並相應地進行調整...但是Chronometer和CountDownTimer類已經很方便地為您完成了此操作。 您應該只切換為使用其中之一或復制其回調方法。
(是的,CountDownTimer的計數方向錯誤,只是將數學取反。)
最后,查看DateUtils.formatElapsedTime() 。 它需要毫秒,並輸出特定於語言環境的“ HH:mm:ss”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.