jmfs.net
当前位置:首页>>关于安卓在 handler.post中可以直接更新ui吗的资料>>

安卓在 handler.post中可以直接更新ui吗

子线程的hanlder里面是不能更新Android UI的.简单说下:如果你在子线程里面创建hander是用的是以下代码:new Handler(Looper.getMainLooper())那还是用的主线程的Looper

一个简单的办法,主线程中定义一个handler,在handlerthread发生改变后使用message通知该handler进行更新ui即可

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

参考别的网站:不可以直接更新UI.虽然Service也是在主线程工作.但是其无法直接更改ui.间接的方法有很多的,可以参考android跨进程通信.activity绑定Servicehandler.sentMessage()handler.post(new Runnable(){})BroadcastReceiver异步通信机制

之前用过android-async-http,虽然没认真看过源码,但也有简单的浏览过,心里一直有个疑问,因为android-async-http也是采用hanlder机制来执行回调的,也就是说handler是它实例化的,可我们知道handler的一个重要作用是将一个任务切换到

是可以访问的!但是,你不可以在非ui线程(子线程)创建handler.所以handler的创建应该放在ui线程(主线程),然后在非ui线程(子线程)中使用它.例如,你可以在ui线程(主线程)中创建:handler handler = new handler(); 然后在非ui线程(子线程)中使用:handler.sendemptymessage(0);这样你就可以通过多线程来处理android的ui,这也是几种异步处理ui方式中的一种.希望对你有帮助哦!

我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. 下面说下有关Handler相关的知识. 多线程一

okhttp 的回调onResponse方法并不是在UI线程,所以不能直接刷新UI可以使用handler来刷新

其实文字游戏程序很简单,就是一个view和一个Activity,在利用下handier和postInvalidate()更新UI调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate() 复制代码 代码如下:packagecom.Test

一般来说在工作线程中执行耗时任务,当任务完成时,会返回UI线程,一般是更新UI.这时有两种方法可以达到目的.一种是handler.sendMessage.发一个消息,再根据消息,执行相关任务代码.另一种是handler.post(r).r是要执行的任务代码.意思就是说r的代码实际是在UI线程执行的.可以写更新UI的代码.(工作线程是不能更新UI的)

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.jmfs.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com