安卓handler机制和runOnUiThread()方法执行流程及两者的区别

在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


非主UI线程更新视图的两种方法:一种是Handler一种是Activity中的 runOnUiThread(Runnable )方法。对于第一中方法,是采用传递消息的方式,调用Handler中方法来处理消息更新视图。这种方式对于不是很频繁的调用是可取的。如果更新的较快,则消息处理会一直排队处理,这样显示会相对滞后。这个时候就可以考虑使用第二中方式,将需要执行的代码放到Runnable的run方法中,然后调用runOnUiThread()这个方法将Runnable的对象传入即可。


handler控制界面UI的流程:

事件响应→开启线程→new Message();→new Bundle();→bundle.putString("event", "Handler更改UI");→msg.setData(bundle);→handler.sendMessage(msg);→new handler(msg.getdata→getString→更改UI)

RunOnUi的流程:(爬源码所得如下)

事件响应→开启线程→runOnUiThread→判断是否当前线程为主UI线程(是就立刻执行,不是就通过handler.post()发送到动作序列中,等到是主UI线程再立刻执行)

阅读更多
上一篇Android6.0权限适配之WRITE_EXTERNAL_STORAGE(SD卡写入)
下一篇android中通过BlockCanary分析android卡顿的原因
想对作者说点什么? 我来说一句

android总结

2013年02月16日 13KB 下载

安卓多线程

2016年01月22日 8KB 下载

HandlerAndOnUIThreadDemo

2014年11月30日 270KB 下载

Handler机制

2017年12月15日 1.92MB 下载

模拟Android Handler机制Demo

2017年08月06日 21.7MB 下载

struts2执行顺序

2013年11月20日 70KB 下载

handler机制

2014年07月01日 1.98MB 下载

Android handler message奇怪用法详解

2016年08月02日 104KB 下载

Android Handler机制实例

2012年11月22日 561KB 下载

Mysql与SQL Server区别

2011年11月05日 293KB 下载

没有更多推荐了,返回首页

关闭
关闭