在 Android 中通过线程更改 UI 元素
如何通过另一个线程通过 setBackgroundColor() 更改 LinearLayout 的背景?
我了解到,Android UI 框架不是线程安全的,因此您无法通过 UI 线程以外的其他线程更改 UI 元素。
我的目标是通过调用 setBackgroundColor() 方法来创建频闪灯效果,并在填充整个屏幕的 LinearLayout 上更改颜色(在本例中为黑/白/黑等)。
How do i change the background of a LinearLayout via setBackgroundColor() by another thread?
I learned, that the Android UI Framework is not threadsafe, so you can't change UI elements by another Thread than the UI thread.
My goal is to create a strobe light effect by calling the setBackgroundColor() method with changing colors (in this case black/white/black/ect,) on a LinearLayout which fills the entire screen.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一种方法是将 Handler 与消息队列一起使用。您在主 UI 线程中实例化
Handler
,然后使用obtainMessage()
将消息发送到Handler
。因此,一个示例如下: 然后在您的线程中您可以调用:
如果调用一次,结果将是
myTextView
现在显示“arg1 = 10; arg2 = 20; test”。One way is to use
Handler
with message queues. You instantiate theHandler
in the main UI thread, then useobtainMessage()
to send messages to theHandler
. So an example would be likeThen in your thread you can call:
The result if called once will be
myTextView
now says "arg1 = 10; arg2 = 20; test".阅读有关无痛线程的博文。基本上 UI 的更改必须发生在 UI 线程上。文章描述了实现这一目标的几种方法。 IMO在你的情况下最好使用
AsyncTask
< /a>.Read blogpost about painless threading. Basically changes in UI must happen on UI thread. Article describes a few ways to achieve that. IMO in your case it would be best to use
AsyncTask
.