如何通過setBackgroundColor()通過另一個線程更改LinearLayout的背景?在Android中通過線程更改UI元素
我瞭解到,Android UI Framework不是線程安全的,所以您不能通過另一個線程來更改UI元素,而不是UI線程。
我的目標是通過在填充整個屏幕的LinearLayout上調用setBackgroundColor()方法來改變顏色(在本例中爲黑色/白色/黑色/ ect)來創建閃光燈效果。
如何通過setBackgroundColor()通過另一個線程更改LinearLayout的背景?在Android中通過線程更改UI元素
我瞭解到,Android UI Framework不是線程安全的,所以您不能通過另一個線程來更改UI元素,而不是UI線程。
我的目標是通過在填充整個屏幕的LinearLayout上調用setBackgroundColor()方法來改變顏色(在本例中爲黑色/白色/黑色/ ect)來創建閃光燈效果。
一種方法是使用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;測試」。
閱讀關於painless threading的博客文章。基本上UI中的變化必須發生在UI線程上。文章介紹了幾種實現這一點的方法。國際海事組織在你的情況下,最好使用AsyncTask
。
線程!=無痛=] – DJPlayer