按Android中的线程更改UI元素

luk*_*uku 0 user-interface multithreading android android-linearlayout

如何通过另一个线程通过setBackgroundColor()更改LinearLayout的背景?

我了解到,Android UI Framework不是线程安全的,所以你不能通过另一个线程而不是UI线程来更改UI元素.

我的目标是通过调用setBackgroundColor()方法来创建一个频闪灯光效果,该方法在填充整个屏幕的LinearLayout上改变颜色(在这种情况下为黑/白/黑/等).

Dee*_*eeV 6

一种方法是使用 Handler消息队列.您Handler在主UI线程中实例化,然后使用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);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的主题中你可以调用:

String myString = new String("test");
updateTextView.obtainMessage(UPDATE_TEXT, 10, 20, myString).sendToTarget();
Run Code Online (Sandbox Code Playgroud)

如果调用一次,结果myTextView现在将显示为"arg1 = 10; arg2 = 20; test".