安卓进入扫一扫界面速度太慢

来源:互联网 发布:python jieba分词 编辑:程序博客网 时间:2024/04/30 03:35

之前在项目中做过一个任务就是解决应用中进入扫一扫界面速度太慢的问题,从中获得不少体会,现将其分享给大家:

首先,我们先来分析为什么进入扫一扫界面会缓慢呢?
主要是因为我们在初始化扫一扫界面时必须实现一个运行于surfaceview上的动画效果(扫一扫的动画),动画效果的绘制显然是个比较耗时的过程.当用户点击进入界面时,每次都要等待我们界面的所有view都绘制完成才显示,这样很显然如果界面存在一些绘制比较耗时的view就会造成进入界面等待时间太长的问题.

可是这些操作又是必须要做的,那要怎么办呢?
看了下qq的扫一扫界面,会发现我每次点进去的时候进入界面都很快,但是呢?并不是你马上进入界面后就可以看到你想看到的东西,而是先看到了一个黑屏(大概就持续几百毫秒),然后才显示出扫一扫的动画出来.

所以,是不是有想明白一些东西?
也就是我们每次进入界面时候并不需要等所有的view绘制完成才显示,对于一些绘制比较耗时的view我们可以延迟显示.

那如何实现这样的功能呢?
首先应该明白一件事,就是我们一个布局里面有很多view,这些view有的是可见的有的是隐藏的,那么进入界面时候,需要等那些隐藏的view绘制完成后才会显示出界面吗?
这是不需要的,安卓进入某个界面时,只要完成了布局里面可见view的绘制工作后就可以立马显示出界面了,当然你看到的也只是那些可见的view.

所以在进入扫一扫界面缓慢问题上就可以这样做:
将surfaceView所在的布局设为隐藏状态,然后在onResume方法上对其进行初始化,通过写一个postDelay方法在稍等一会儿后将其设为可见(也就是qq扫一扫界面黑屏一会儿后显示出扫一扫动画的效果).

补充一个知识点: 关于进入某界面时view的绘制过程:
我们都知道进入某个Activity时会先执行onCreate->onStart->onResume方法.而view的绘制从onCreate方法就已经开始,系统会边执行代码,边绘制view.用户看到界面是要等onResume方法执行完毕(注意是执行完毕而不是执行到onResume方法)并且所有可见view都绘制完毕才可以.所以用户看到界面的时刻不仅取决于view的绘制速度也取决与代码的执行速度,这两者无论谁先执行完毕都得等对方完成后才可以进入界面.如果你在onCreate,onStart,onResume方法里有执行一些耗时的逻辑操作的话,也会增加进入界面的时间,所以这些操作最好要异步处理

总结:对于某些界面如果存在绘制较耗时的view,在进入该界面时需要将这些view设为隐藏状态,等其绘制完成后再设为可见状态,当然这个过度的时间可以以其他view代替显示给用户看,比如qq扫一扫界面刚进入时候的短暂黑屏.除此之外,最好不要在onCreate,onStart,onResume方法里有执行一些耗时的逻辑操作,如果必须要这样做的话最好进行异步处理.

0 0
原创粉丝点击