博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android的性能优化
阅读量:6093 次
发布时间:2019-06-20

本文共 1288 字,大约阅读时间需要 4 分钟。

性能指标

  1. 布局复杂度:布局复杂会导致布局需要更长的时间,从而导致进入应用慢、页面切换慢

  2. 耗电量:耗电量大会导致机器发热、缩短机器的有效使用时长

  3. 内存:内存消耗大会导致频繁GC,GC时会暂停其它工作,导致页面卡顿;内存泄露会导致剩余可用内存越来越小;内存不足会导致应用异常

  4. 网络:频繁的网络访问会导致耗电和影响应用的性能;网络交互数据大小会影响网络传输的效率

  5. 程序执行效率:糟糕的代码会严重影响程序的运行效率,UI线程过多的任务会阻塞应用的正常运行,长时间持有某个对象会导致潜在的内存泄露,频繁的IO操作、网络操作而不用缓存会严重影响程序的运行效率

布局复杂度的优化

  1. 在Android中单独的布局性能:FrameLayout>LinearLayout>RelativeLayout

  2. 三个标签减少布局的层级结构:

    • include: 用于一些复用性很高的布局文件,比如一个App的标题栏

    • merge:减少View树的层级(注意:merge标签只能作为XML布局的根标签使用)

    • ViewStub:懒加载那些只有在特定情况下才会出现的界面(比如没有网络的时候),性能要高于给View设置visiblity="gone"

GPU Overdraw(过度绘制)

GPU过度绘制就指的是在屏幕一个像素上绘制多次(超过一次),过度绘制其实是一个性能和设计的交叉点。我们在设计上追求很华丽的视觉效果,但一般来说这种视觉效果会采用非常多的层叠组件来实现,这时候就会带来过度绘制的问题,下面这张图展示了过度绘制的颜色与次数

过度绘制的图

检测的工具:

  • HierarchyViewer 可查看布局层次结构,View绘制时耗时。

  • 无线UIViewer可在手机端直接实现HierarchyViewer的功能,查看任意界面的UI布局。

有关于overdraw的更多信息,请参阅:

Android中耗电量

虽然大多数应用都不会过多的消耗电量,不过现在很多APP都集成了IM、地图定位等功能,还是简单介绍一下

  1. 后台Service应该尽可能减少唤醒CPU的次数,比如IM类业务的长连接心跳、QQ提醒待机闹钟类业务的alarm硬时钟唤醒

  2. Wi-Fi比蜂窝数据,包括2G(GPRS)、3G更省电,尽量在Wi-Fi下传输离线资源

  3. Wake locks(一种锁机制,有些文献翻译成唤醒锁。)持有时间过长会导致耗电增加

CPU灭屏休眠需要做一个判断,就是看还有没有应用持有wake locks,如果有,CPU将不会休眠。有些应用不合理地申请wake locks,或者申请了忘记释放,都会导致手机无法休眠,耗电增加。

第三方检测内存泄漏的工具

LeakCanary

LeakCanary是一个检测内存泄露的开源类库:

clipboard.png

GT-

GT(随身调)是APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment)。可对APP进行快速的CPU、内存、流量、电量、帧率/流畅度性能测试、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。

转载地址:http://yswza.baihongyu.com/

你可能感兴趣的文章
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
java 中getDeclaredFields() 与getFields() 的区别
查看>>
熟练掌握doc命令下的文件操作
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
【Linux】linux经常使用基本命令
查看>>
Java 内存区域和GC机制
查看>>
STL之string
查看>>
更新代码和工具,组织起来,提供所有博文(C++,2014.09)
查看>>
HTML模块化:使用HTML5 Boilerplate模板
查看>>
登记申请汇总
查看>>
Google最新截屏案例详解
查看>>
2015第31周一
查看>>
2015第31周日
查看>>
在使用EF开发时候,遇到 using 语句中使用的类型必须可隐式转换为“System.IDisposable“ 这个问题。...
查看>>
PHP使用DES进行加密和解密
查看>>
Oracle 如何提交手册Cluster Table事务
查看>>
BeagleBone Black第八课板:建立Eclipse编程环境
查看>>
在服务器上用Fiddler抓取HTTPS流量
查看>>