2010-10-30 56 views
0

我希望你能幫助我:幫助,Handler類更新UI - Android電子

我需要更新我的UI Android應用程式,我嘗試使用Handler類做到這一點,利用http://developer.android.com/resources/articles/timed-ui-updates.html以及使用Handlers作爲指南的Android開發人員資源「Common Task」。

基本上,我需要兩個之間的東西 - 定時更新的用戶界面,但沒有按鈕。所以這裏是我正在研究的相關代碼。所有的幫助非常感謝。

public class Activity1 extends Activity { 

[...變量]

最終處理程序mHandler =新的處理程序();

final Runnable mUpdateResults = new Runnable() { 
    public void run() { 

     UpdateDisplay(); 
     mHandler.postDelayed(mUpdateResults, 200); 
    } 
}; 


/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

[...]

startLongRunningOperation();

} 


protected void startLongRunningOperation() { 

    Thread t = new Thread() { 
     public void run() { 
      if (mStartTime == 0L) { 
       mStartTime = System.currentTimeMillis(); 
       mHandler.postDelayed(mUpdateResults, 200);} 
      mHandler.post(mUpdateResults); 
     } 
    }; 
    t.start(); 
} 

再次感謝!

+1

你的問題是什麼? – CommonsWare 2010-10-30 19:32:14

回答

3

在Android上,最好使用AsyncTask在後臺執行任務(逐漸更新),並使用此任務的結果更新UI。

編輯:

校驗碼後,我覺得你的處理程序正常工作。可能問題出在UpdateDisplay()。由於您正在更新來自後臺線程的顯示,請務必在完成View的更新後再致電[view.postInvalidate()][2]

+0

我的問題是,處理程序代碼不會定期更新我的UI - 它只是顯示我的UI沒有更新。所以我需要知道我做錯了什麼。 謝謝你,彼得的建議 - 我現在正在研究你的建議。 – QueryMan 2010-10-30 19:56:15

+0

您的'UpdateDisplay()'是否定期被調用?如果是這樣,Handler工作正常,問題必須在'UpdateDisplay()'內。在這種情況下,將代碼發佈到'UpdateDisplay()'。 – 2010-11-01 11:27:59

+0

提示:由於您正在更新後臺線程顯示,您需要在完成更新視圖後調用view.postInvalidate()。 – 2010-11-01 11:29:56