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线程了
------解决方案--------------------
是的,需要更新UI就需要在主线程里构造handler,并传递给子线程,在非UI线程里构造Handler的意义就只在于异步消息通知了,可以用在回调处理的地方
新人刚开始学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线程了
------解决方案--------------------
是的,需要更新UI就需要在主线程里构造handler,并传递给子线程,在非UI线程里构造Handler的意义就只在于异步消息通知了,可以用在回调处理的地方