2012-06-09 92 views
1

我忙於爲Android設備製作應用程序。現在我正在測試一些東西。使用線程睡眠更新UI

我想改變背景顏色的限制時間,讓我們說5次。每次背景改變時,我都希望它在2-3秒後再次改變。

如果我使用Thread類,它會在Thread完成後加載整個模板,但看不到顏色變化,但它們在「背景」中運行(我可以在LogCat中看到) 。

我希望有一個教程或一個我可以使用的例子。

謝謝!

回答

4

我最近學會了如何做到這一點。這裏有一個很好的教程: http://www.vogella.com/articles/AndroidPerformance/article.html#handler

起初有點棘手,你在主線程上執行,你啓動一個子線程,並回發到主線程。

我做了這個小活動閃爍的按鈕和關閉,以確保我知道發生了什麼事:

公共類HelloAndroidActivity延伸活動{

/** Called when the activity is first created. */ 



    Button b1; 

    Button b2; 

    Handler myOffMainThreadHandler; 

    boolean showHideButtons = true; 


@Override 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    myOffMainThreadHandler = new Handler(); // the handler for the main thread 


    b1 = (Button) findViewById(R.id.button1); 

    b2 = (Button) findViewById(R.id.button2); 


} 



public void onClickButton1(View v){ 



    Runnable runnableOffMain = new Runnable(){ 



       @Override 

       public void run() { // this thread is not on the main 

         for(int i = 0; i < 21; i++){ 

          goOverThereForAFew(); 



          myOffMainThreadHandler.post(new Runnable(){ // this is on the main thread 

            public void run(){ 

              if(showHideButtons){ 

              b2.setVisibility(View.INVISIBLE);   

              b1.setVisibility(View.VISIBLE); 

              showHideButtons = false; 

              } else { 

              b2.setVisibility(View.VISIBLE);   

              b1.setVisibility(View.VISIBLE); 

              showHideButtons = true; 

              } 

            } 

          }); 



         } 

       } 



    }; 



    new Thread(runnableOffMain).start(); 



} 



    private void goOverThereForAFew() { 

     try { 

       Thread.sleep(500); 

     } catch (InterruptedException e) {     

       e.printStackTrace(); 

     } 

    } 

}

4

使用處理程序在你的UI線程:

Handler mHandler = new Handler(); 

Runnable codeToRun = new Runnable() { 
    @Override 
    public void run() { 
     LinearLayout llBackground = (LinearLayout) findViewById(R.id.background); 
     llBackground.setBackgroundColor(0x847839); 
    } 
}; 
mHandler.postDelayed(codeToRun, 3000); 

處理程序將運行自己喜歡的任意代碼,在UI線程上,在指定的時間量之後。

+0

所以,簡單而有效。這是添加延遲線程的完美選擇。謝謝Zaid! –