android中线程的handler能不能更新Activity的UI组件?该怎么处理

android中线程的handler能不能更新Activity的UI组件?
新人刚开始学android开发,看到handler这一章。知道可以在主线程(UI线程)的handler中接受其他线程的信息来更新Activity的UI,想到了一个疑问,handler是可以在一个线程(非主线程)里面声明的,那么这个handler就是属于这个线程(非主线程)的了,那这个线程的handler可以用来更新Activity的UI吗?(我是看到一句话说Activity只运行主线程来来修改UI组件的,联系起来就有这个疑问)。。。。如果问题本身的描述就是存在理解的误区的话请指出。。谢谢!
------解决方案--------------------
就想你说的Handler可以在线程中声明,实际上Handler依赖于当前线程中messageQueue和Looper(每个线程可以且只能有一个),也就是说你在非UI线程中构造的Handler,它的循环和事件处理仍然是在当前线程中执行的,不能更新UI。

可以找些Handler原理文章看看
------解决方案--------------------
将handler声明为全局变量,在线程中需要发送message的时候,直接就使用handler发送message,然后在外面处理就可以更新UI线程了
------解决方案--------------------
引用:
Quote: 引用:

就想你说的Handler可以在线程中声明,实际上Handler依赖于当前线程中messageQueue和Looper(每个线程可以且只能有一个),也就是说你在非UI线程中构造的Handler,它的循环和事件处理仍然是在当前线程中执行的,不能更新UI。

可以找些Handler原理文章看看


嗯··我这两天做了个DEMO试验了,当我把一个handler放在一个线程里面声明的时候。例如
class ChangePicture extends Thread
{
public Handler mHandler;
public void run()
{
Looper.prepare();
mHandler=new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what==0x123)
{   
更新UI操作

}
}
}
};
Looper.loop();
}
}
程序是真的跑不了的,一直是进程错误自动闪退的;
而当我把这个handler放在了主线程里面,就真的是可以更新UI而没有报错了;
那换句话说,是不是可以肯定的得出结论:要更新UI的话,对应的handler只能在主线程里面?



是的,需要更新UI就需要在主线程里构造handler,并传递给子线程,在非UI线程里构造Handler的意义就只在于异步消息通知了,可以用在回调处理的地方