這是我的計時器類,這個類被設計爲不斷更新視圖中的計時器。但是,當我運行應用程序時,第一個Toast消息顯示在屏幕上,但第二個永遠不會到達(timerTask的「run」方法從未執行)。我知道這可能很簡單,我做錯了。如果任何人都能引導我進入正確的方向,那將會很棒。TimerTask沒有執行?
public class MyTimer {
static Timer _timerTask = new Timer();
static int totalSeconds = 1, hour = 0, min = 0, sec = 0;
static String mTimeFormat = "%02d:%02d:%02d";
static String timeTakenString;
public static void start(){
Toast.makeText(GPSMain.context, "Message one", Toast.LENGTH_LONG).show();
TimerTask timer = new TimerTask() {
@Override
public void run() {
Toast.makeText(GPSMain.context, "Message two", Toast.LENGTH_LONG).show();
totalSeconds += 1;
sec += 1;
if(sec >= 60) {
sec = 0;
min += 1;
if (min >= 60) {
min = 0;
hour += 1;
}
}
timeTakenString = String.format(mTimeFormat, hour, min, sec);
postExecute.sendEmptyMessage(0); //update UI
}
private Handler postExecute = new Handler(){
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
GPSMain.timer.setText("Time Taken: "+timeTakenString);
}
};
};
_timerTask.scheduleAtFixedRate(timer,1000,1000);
}
}
代碼在另一個文件中調用這個類:
MyTimer myTimer = new MyTimer();
....
myTimer.start();
項目SPEC變了! 我的項目負責人更改了項目的規格,以便不再需要將定時器更新到UI,而是將其顯示爲最終結果。無論如何接受第一個答案,因爲它解決了原來的問題。將在下面發佈新代碼。
新代碼調用:
System.currentTimeMillis();
在runcycle,它返回一個長的beggining和結束。然後從第二個值中減去第一個值以計算執行運行週期所用的時間量。然後將該值操縱並放入一個以字符串形式顯示在末尾的計時器格式。
public static String getTimeTaken(long end, long start){
@SuppressWarnings("unused")
String formattedTime = "", hourHour = "", hourMin = ":", minSec = ":";
long timeTaken = (end-start)/1000, hour = 0, min = 0, sec = 0;
if (timeTaken>9){
hourHour = "0";
hourMin = ":0";
if (timeTaken>=60){
if (timeTaken>= 3200){
hour = timeTaken/3200;
timeTaken = timeTaken%3200;
if (hour>9){
hourHour = "";
}
}
min = timeTaken/60;
timeTaken = timeTaken%60;
if (min >9){
hourMin = ":";
}
}
sec = timeTaken;
if(sec%60<10){
minSec = ":0";
}
return formattedTime = (hourHour+hour+hourMin+min+minSec+sec);
}
sec = timeTaken;
minSec = ":0";
hourMin = ":0";
hourHour = "0";
return formattedTime = (hourHour+hour+hourMin+min+minSec+sec);
}
謝謝,但你有任何想法,爲什麼運行方法不工作?如果你找到我,它甚至不會啓動計時器?所以在當前狀態下的代碼我沒有任何更新到UI – Ian