随着Android开发越来越趋于完善,工程师的开发水平以及用户对产品的要求也日益增长,所以对于开发质量的要求,甚至有点不近人情的苛刻。内存优化、UI卡顿优化、App监控崩溃等性能调优,也逐渐成为了中高级开发者的必备技能。
很多Android工程师,对于性能优化相关内容都还不够熟悉,为了让大家更好地掌握性能优化技能,bugly和友盟+U-APM都是帮助大家进行APP性能优化的平台,两款产品相比较来说,还是友盟+U-APM使用起来更好用一些,从后台来看,U-APM的功能项是很多的,而且可筛选的维度上很细致。
今天在这里给大家分享友盟+U-APM是如何对Android进行性能优化的。
一、 Android应用性能的指标主要有:
1、布局复杂度:
布局复杂会导致布局需要更长的时间,从而导致进入应用慢、页面切换慢;
2、耗电量:
耗电量大会导致机器发热、缩短机器的有效使用时长;
3、内存:
内存消耗大会导致频繁GC,GC时会暂停其它工作,导致页面卡顿;内存泄露会导致剩余可用内存越来越小;内存不足会导致应用异常;
启动:
从心理学角度而言,越快的启动速度往往给用户以性能好,高效可靠的心理暗示,这就很容易让用户对其产生好感,为你后面打动用户留下了余地。
优化步骤
布局优化
•减少布局的层级,合理的使用include,merge,ViewStub;
•自定义组件的onDraw()中避免大量创建临时对象,比如String,以免频繁触发GC;
•自定义组件的onDraw()中,考虑使用canvas.clipRect()绘制需要被绘制的区域;
•对像ListView这样的组件容器,考虑使用convertView,使用ViewHolder;
•考虑使用性能更高的组件,比如推荐使用RecycleView来代替ListView,使用staticlayout来实现自动换行。
电量优化
•减少唤醒屏幕的次数与持续的时间,正确的使用WakeLock;
•延迟非必须的操作到充电状态时,比如日志上报完全可以在夜间充电时完成,这点可以结合JobScheduler使用;
•使用传感器采集数据时,一旦不需要记得取消注册;
•减少网络通信,合并通信;
•合理使用定位功能,减少位置更新频率以及根据实际情况使用不同精度的定位需求。
内存优化
•主动的释放内存,在onLowMemory()和onTrimMemory()中适当的释放内存;
•避免内存泄漏和内存溢出;
•在使用Bitmap的时候,考虑对其进行压缩,使用缓存或者改变颜色模式,比如android默认的颜色格式是ARGB_8888,在要求不高的情况下可以采用RGB__565,这样每个像素1占用的内存就可懂4byte到2byte;
•减少帧动画的使用,如果需要,通过SurfaceView实现;
•使用更轻量级的数据结构,比如ArrayMap/SparseArray;
•合理的使用相关组件,比如Service和Webview,在不需要的时候主动结束其生命周期;
•合理的使用多进程,比如像音乐播放器类,可以分为主进程和播放进程;
•使用异步队列时考虑有界队列;
•如果你能明确知道HashMap的大小,那就再初始化时为其制定容量。
启动优化:
•Activity的onCreate()中减少复杂和耗时的操作;
•Application的onCreate(),attachBaseContext()中同样减少复杂和耗时的操作,但是对于很多App在此处会执行大量组件和服务的初始化操作,如果可能考虑并行初始化;
•提供自定义启动窗口,比如将一张图片通过设置主题的方式显示为启动窗口;
•优化布局
这篇文章分析了Android应用性能的布局、耗电量、内存以及启动,平时开发中,大部分同学可能都是做业务需求为主,对于这些问题,可能不太注重,大家可以借助第三方平台友盟+U-APM,对APP性能缺陷进行查找,帮你更快解决问题。另外友盟+U-APM还提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。