0

如何通過setBackgroundColor()通過另一個線程更改LinearLayout的背景?在Android中通過線程更改UI元素

我瞭解到,Android UI Framework不是線程安全的,所以您不能通過另一個線程來更改UI元素,而不是UI線程。

我的目標是通過在填充整個屏幕的LinearLayout上調用setBackgroundColor()方法來改變顏色(在本例中爲黑色/白色/黑色/ ect)來創建閃光燈效果。

回答

6

一種方法是使用Handler消息隊列。您在主UI線程中實例化Handler,然後使用obtainMessage()將消息發送到Handler。因此,一個例子是像

public final Handler updateTextView = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     if(msg.what == UPDATE_TEXT){ 
      myTextView.setText("arg1 = " + msg.arg1 + 
          "; arg2 = " + msg.arg2 + "; " + (String)msg.obj); 
     } 
    } 
} 

然後在你的線程您可以撥打:

String myString = new String("test"); 
updateTextView.obtainMessage(UPDATE_TEXT, 10, 20, myString).sendToTarget(); 

如果調用一次將myTextView結果現在說 「ARG1 = 10; ARG2 = 20;測試」。

0

閱讀關於painless threading的博客文章。基本上UI中的變化必須發生在UI線程上。文章介紹了幾種實現這一點的方法。國際海事組織在你的情況下,最好使用AsyncTask

+0

線程!=無痛=] – DJPlayer