性能指标
布局复杂度:布局复杂会导致布局需要更长的时间,从而导致进入应用慢、页面切换慢
耗电量:耗电量大会导致机器发热、缩短机器的有效使用时长
内存:内存消耗大会导致频繁GC,GC时会暂停其它工作,导致页面卡顿;内存泄露会导致剩余可用内存越来越小;内存不足会导致应用异常
网络:频繁的网络访问会导致耗电和影响应用的性能;网络交互数据大小会影响网络传输的效率
程序执行效率:糟糕的代码会严重影响程序的运行效率,UI线程过多的任务会阻塞应用的正常运行,长时间持有某个对象会导致潜在的内存泄露,频繁的IO操作、网络操作而不用缓存会严重影响程序的运行效率
布局复杂度的优化
在Android中单独的布局性能:
FrameLayout>LinearLayout>RelativeLayout
-
三个标签减少布局的层级结构:
include: 用于一些复用性很高的布局文件,比如一个App的标题栏
merge:减少View树的层级(注意:merge标签只能作为XML布局的根标签使用)
ViewStub:懒加载那些只有在特定情况下才会出现的界面(比如没有网络的时候),性能要高于给View设置visiblity="gone"
GPU Overdraw(过度绘制)
GPU过度绘制就指的是在屏幕一个像素上绘制多次(超过一次),过度绘制其实是一个性能和设计的交叉点。我们在设计上追求很华丽的视觉效果,但一般来说这种视觉效果会采用非常多的层叠组件来实现,这时候就会带来过度绘制的问题,下面这张图展示了过度绘制的颜色与次数
检测的工具:
HierarchyViewer 可查看布局层次结构,View绘制时耗时。
无线UIViewer可在手机端直接实现HierarchyViewer的功能,查看任意界面的UI布局。
有关于overdraw的更多信息,请参阅:
Android中耗电量
虽然大多数应用都不会过多的消耗电量,不过现在很多APP都集成了IM、地图定位等功能,还是简单介绍一下
后台Service应该尽可能减少唤醒CPU的次数,比如IM类业务的长连接心跳、QQ提醒待机闹钟类业务的alarm硬时钟唤醒
Wi-Fi比蜂窝数据,包括2G(GPRS)、3G更省电,尽量在Wi-Fi下传输离线资源
Wake locks(一种锁机制,有些文献翻译成唤醒锁。)持有时间过长会导致耗电增加
CPU灭屏休眠需要做一个判断,就是看还有没有应用持有wake locks,如果有,CPU将不会休眠。有些应用不合理地申请wake locks,或者申请了忘记释放,都会导致手机无法休眠,耗电增加。
第三方检测内存泄漏的工具
LeakCanary
LeakCanary是一个检测内存泄露的开源类库:
GT-
GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment)。可对APP进行快速的CPU、内存、流量、电量、帧率/流畅度性能测试、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。