[发明专利]在异步线程中更新UI的方法及系统有效
申请号: | 201611129759.5 | 申请日: | 2016-12-09 |
公开(公告)号: | CN106775699B | 公开(公告)日: | 2021-07-23 |
发明(设计)人: | 刘一琛 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
主分类号: | G06F9/451 | 分类号: | G06F9/451;G06F9/54 |
代理公司: | 湖北武汉永嘉专利代理有限公司 42102 | 代理人: | 许美红 |
地址: | 430073 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 异步 线程 更新 ui 方法 系统 | ||
本发明公开了一种在异步线程中更新UI的方法,包括以下步骤:创建更新UI的异步线程,包括重写该异步线程的run方法,并通过安卓系统的WindowManager在该异步线程中创建新的根视图rootview;在异步线程中创建消息循环,包括创建一消息队列,用于阻塞该异步线程的run方法,并防止该异步线程中的根视图rootview被销毁;还包括添加逻辑:如果有UI刷新的操作,则在异步线程中进行刷新;若无,则保持等待状态;将UI更新操作的消息发送到消息队列,并在异步线程中更新UI。本发明可以实现UI更新与应用主UI进行完全的隔离。
技术领域
本发明涉及安卓系统中的UI更新,尤其涉及一种在异步线程中更新UI 的方法及系统。
背景技术
在android系统中,每个app运行时系统都会给app分配一个主线程用来处理app自身的刷新操作,如果在主线程中进行一些复杂的耗时处理,就会造成主线程短暂的停顿卡住,给用户造成应用卡顿的感觉,比如进行一些文件的读写操作,网络的访问,数据库的读取等,并且在android中如果主线程停顿时间过长,系统会直接给出ANR,造成对用户的体验大打折扣,并且在android高版本上,所以一般在android开发时,需要将这些操作放在异步线程中,等操作好了,再将结果反馈给主线程,通知主线程进行更新UI (User Interface用户界面)的操作。不过某些情况下,可能需要自己实现一个UI的界面,让其更新与主线程分离,所以更新就需要在自己的线程中,而在android中如果直接在异步线程中更新UI的话,会发出系统抛出的异常,使应用挂掉。
目前常规的方法:在异步线程更新UI,其实其基本原理是,在异步线程中将数据获取成功后,然后通过持有主线程消息队列的handler将数据获取成功的消息传递到主线程,然后在主线程进行更新UI,其本质UI的更新操作还是在主线程。以图片异步加载举例,当应用异步加载图片时,首先创建一个异步的线程,然后在该线程中进行耗时的操作(图片的下载过程),当图片下载完成后通过将下载好的图片转成Bitmap对象,然后将消息发送到主线程,主线程中的ImageView将bitmap加载显示出来,创建异步线程可以通过创建Thread对象或者AsyncTask对象(这两个都是在android中创建异步线程的工具类),将异步线程的消息发送到主线程可以通过handler的post方法,或者activity的runOnUiThread方法,其参数都是发送一个runable对象,其实runOnUiThread内部也是调用handler的post方法,也有可以通过 handler的sendMessage方法来进行操作,但是其内部也是通过post方法执行的,从上面描述的原理可以知道,其实常规中异步线程更新UI的本质就是异步线程向主线程发送消息,主线程收到消息后在主线程中更新UI,其根本没有在异步线程中更新UI,前面提到过android中直接在异步线程中更新UI 会抛出异常,导致应用crash,所以常规方法中绕过了这个问题。
发明内容
本发明要解决的技术问题在于针对现有技术中更新UI的方式要么使系统主线程出现短暂的停顿卡住,要么会导致系统抛出异常使应用挂掉的缺陷,提供一种在异步线程更新UI的方法,其能做到与应用主UI进行完全的隔离,更新设置等与主UI互相不干扰,提高用户体验,同时也能有效减轻主线程的压力,分担视图刷新的资源消耗。
本发明解决其技术问题所采用的技术方案是:
提供一种在异步线程中更新UI的方法,包括以下步骤:
创建更新UI的异步线程,包括重写该异步线程的run方法,并通过安卓系统的WindowManager在该异步线程中创建新的根视图rootview;
在异步线程中创建消息循环,包括创建一消息队列,用于阻塞该异步线程的run方法,并防止该异步线程中的根视图rootview被销毁;还包括添加逻辑:如果有UI刷新的操作,则在异步线程中进行刷新;若无,则保持等待状态;
将UI更新操作的消息发送到消息队列,并在异步线程中更新UI。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611129759.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种存储系统配置信息的获取方法
- 下一篇:一种简化代码的方法和装置