如何通过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