一、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失效,禁用同账号登陆多台设备,缺少参数,参数传递异常等等。