性能优化

一、Android性能优化的方面

针对Android的性能优化,主要有以下几个有效的优化方法:

1.布局优化

2.动画优化

3.启动优化

4.刷新优化

5渲染优化

6.线程优化

7图片网络优化

8网络数据优化

9异常拦截优化

二、布局优化

关于布局优化的思想很简单,就是尽量减少布局文件的层级。进来减少组件的数量,布局中的层级少组件数量少,就意味着Android绘制时的工作量少了,那么程序的性能自然就提高了

优化:删除布局中无用的控件和层次,其次有选择地使用性能比较低的ViewGroup。

采用标签ViewStub,Viewstub组件开始的时候不需要渲染出来,我们通过setVisibility(View.VIVIBLE)和inflate去显示组件。inflate只能够被调用一次,如果多次就会报错。

三、动画优化

在实现动画效果时,需要根据不同场景选择合适的动画框架来实现。有些情况下,可以用硬件加速方式来提供流畅度。

四、启动优化

应用一般都有闪屏页,优化闪屏页的 UI 布局,可以通过 Profile GPU Rendering 检测丢帧情况。

也可以通过启动加载逻辑优化。可以采用分布加载、异步加载、延期加载策略来提高应用启动速度。

数据准备。数据初始化分析,加载数据可以考虑用线程初始化等策略。

五、刷新优化

Android开发中,通常是异步操作页面的,因此需要可以从刷新优化上来优化应用,主要有两个原则:

减少刷新次数;

缩小刷新区域;

六、渲染优化

过度绘制是指在屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的 UI 结构中,如果不可见的 UI 也在做绘制的操作,就会导致某些像素区域被绘制了多次,从而浪费了多余的 CPU 以及 GPU 资源。我们可以通过开启手机的过渡绘制功能来检测页面是否被过度绘制。

为了避免过度绘制,我们可以从以下几个方面进行优化:

布局上的优化,移除 XML 中非必须的背景,移除 Window 默认的背景、按需显示占位背景图片。

自定义View优化,使用 canvas.clipRect()来帮助系统识别那些可见的区域,只有在这个区域内才会被绘制。

七、图片网络优化

例如,针对网络情况,返回不同的图片数据,一种是高清大图,一种是正常图片,一种是缩略小图。当用户处于wifi下给控件设置高清大图,当4g或者3g模式下加载正常图片,当弱网条件下加载缩略图。

八、网络数据优化

移动端获取网络数据优化可以从以下几点着手:

连接复用:节省连接建立时间,如开启 keep-alive。

对于Android来说默认情况下HttpURLConnection和HttpClient都开启了keep-alive。只是2.2之前HttpURLConnection存在影响连接池的Bug,具体可见:Android HttpURLConnection及HttpClient选择

请求合并:即将多个请求合并为一个进行请求,比较常见的就是网页中的CSS Image Sprites。如果某个页面内请求过多,也可以考虑做一定的请求合并。

减少请求数据的大小:对于post请求,body可以做gzip压缩的,header也可以做数据压缩。返回数据的body也可以做gzip压缩,body数据体积可以缩小到原来的30%左右。

九、异常拦截优化

在获取数据的流程中,访问接口和解析数据时都有可能会出错,我们可以通过拦截器在这两层拦截错误。

在访问接口时,我们不用设置拦截器,因为一旦出现错误,Retrofit会自动抛出异常。比如,常见请求异常404,500,503等等。

在解析数据时,我们设置一个拦截器,判断Result里面的code是否为成功,如果不成功,则要根据与服务器约定好的错误码来抛出对应的异常。比如,token失效,禁用同账号登陆多台设备,缺少参数,参数传递异常等等。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容