2013-03-13 208 views
0

我通過使用Runnable更新TextView文本來完成時鐘。當我在活動中時,TextView會被正確更新,但是當我離開並返回活動時,run()方法中的代碼不再執行。當活動暫停時Runnable停止

我需要在我的活動onResume中再次撥打run()嗎?爲什麼? mTicker Runnable是否停止?

MyActivity.java

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    mHandler = new Handler(); 

    mTicker = new Runnable() { 
     public void run() { 
      if(mClockStopped) return; 
      long now = System.currentTimeMillis(); 
      mCalendar.setTimeInMillis(now); 
      mClock.setText(DateFormat.format("kk:mm", mCalendar)); 
      mClock.invalidate(); 
      long upTime = SystemClock.uptimeMillis(); 
      long next = upTime + (60000 - now % 60000); 
      mHandler.postAtTime(mTicker, next); 
     } 
    }; 
    mTicker.run(); 

    /* more stuff */ 

} 

@Override 
    public void onResume() 
    { 
     super.onResume(); 
     mClockStopped = false; 
    } 

    @Override 
    public void onPause() 
    { 
     mClockStopped = true;   
     super.onPause(); 
    } 
+3

我會說這是因爲你的run()方法退出,如果mClockStopped標誌設置:-) – fedepaol 2013-03-13 09:50:09

+0

不是一個明智的屁股,但如果你實際上自己編寫代碼,你會知道這個問題是@fedepaol建議的。這應該是一個提醒,不僅僅是從別人那裏盲目複製代碼;-) – Darwind 2013-03-13 09:58:34

+0

好吧,'return'退出該方法!謝謝 :) – jul 2013-03-13 10:02:51

回答

3

也許不是那麼簡單,但設置mClockStopped爲真讓你Runnable的run()退出。

你應該叫

mClockStopped = false; 
mTicker.run(); 

onResume