2013-02-06 58 views
0

我有一個自定義View類正在繪製圖像。問題是,當我使用Thread.sleep(200);在onDraw方法中,它也會影響同一活動中的XML元素。所以我必須等待200毫秒,直到發生一些事情。如何防止onDraw中的Thread.Sleep影響其他活動?

MainPage extends Activity implements OnClickListener{ 
    onCreate(...){ 

     RelativeLayout rl = (RelativeLayout) findViewById(R.id.main_rl); 
     rl.addView(new CustomView(this)); 
    } 

    onClick(View v){ 
     switch(v.getId){ 
      ... 
     }; 
    } 
} 


CustomView extends View{ 

    onDraw(){ 
     try{ 
      Thread.sleep(200); 
      .... 
     } 
    } 
} 

任何幫助將不勝感激。

回答

1

永遠不要在Android中的任何UI偵聽器回調(或在UI線程上運行的任何其他位置)運行長操作。相反,創建一個新的線程來執行睡眠,然後做任何需要做的事情。請記住,如果您想要再次與UI進行交互,則需要在UI線程中執行此操作,您可以通過調用runOnUiThread()來進行調度。

CustomView extends View{ 

    onDraw(){ 
     (new Thread(myRunnable)).start(); 
    } 
} 

Runnable myRunnable = new Runnable() { 
    void run() { 
     try { Thread.sleep(...); } catch...; 
     do_non_ui_things_if_needed(); 
     runOnUiThread(some_runnable_for_this_if_needed); 
    } 
} 
+0

非常感謝你的男人,也爲解釋! – Xarialon