我知道此問題之前已被詢問,但未提供任何答案。我也嘗試尋找其他地方,追蹤函數調用並檢查了所有內容,但我無法弄清楚答案。我有一個非常簡單的Handler,每秒調用一次Runnable變量。這是爲了跟蹤活動花費的時間。Android處理程序調用Runnable兩次
所以處理程序在onCreate中開始調用,並且在Runnable中有一個postDelayed(runnableVar,1000)來繼續每秒運行一次。這是更新活動中的文本視圖。
文本視圖顯示雙打中的所有內容。我檢查了我的日誌,發現runnable被調用兩次。我不知道爲什麼會發生這種情況。這是我的代碼:
//My runnable variable in the activity
private Runnable mUpdateTimeTask = new Runnable(){
@Override
public void run(){
if (gameTimer != null) {
Log.d("UPDATERUNNABLE", "Inside runnable run");
gameTimer.setText(getTime());
}
mHandler.postDelayed(this,1000);
}
};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(TRIALTAG,"Inside on create");
startMins = mPrefsMin; //This is set in onPause and retrieved onResume
startSecs = mPrefsSecs;
Log.d(TRIALTAG,"Start mins : " + startMins + " Start Secs : " + startSecs);
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.post(mUpdateTimeTask);
}
private String getTime() {
String finalTime;
Log.d("GETTIME", "Start secs is : " + startSecs);
if(startSecs >= 60){
startSecs=0;
startMins++;
}
if(startSecs<10){
finalTime = startMins+":0"+startSecs;
}else{
finalTime = startMins+":"+startSecs;
}
startSecs++;
return finalTime;
}
@Override
protected void onPause(){
super.onPause();
Log.d(TRIALTAG,"On Pause CALLED");
mHandler.removeCallbacks(mUpdateTimeTask);
SharedPreferences.Editor ed = mPrefs.edit();
ed.putInt("my_mins", startMins);
ed.putInt("my_secs", startSecs);
ed.commit();
}
@Override
protected void onResume(){
super.onResume();
Log.d(TRIALTAG,"On RESUME CALLED");
if(gameTimer != null){
mPrefs = getSharedPreferences("mPrefs", MODE_PRIVATE);
mPrefsMin = mPrefs.getInt("my_mins", 0);
mPrefsSecs = mPrefs.getInt("my_secs", 0);
mHandler.post(mUpdateTimeTask);
}else{
mPrefsMin = 0;
mPrefsSecs = 0;
}
}
所有這些都在我的活動課內。我究竟做錯了什麼??
非常感謝。無論是解決方案還是指出我犯的錯誤。我對Android仍然陌生,而且這些事情對我來說應該比現在更加明顯:| ..接受爲答案。 – KVNam 2013-04-26 07:16:55
如果您在onResume中調用removeCallbacks,則無需在onCreate中發佈 – pskink 2013-04-26 07:26:05