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