android性能优化实战前篇

本文地址:http://blog.csdn.net/iamws/article/details/51629160


前言:

        最近因为某项目cpu,内存的使用率实在让人不敢恭维;手机发烫,电量下降已经让用户无法忍受;频繁快速迭代发版导致各种性能问题突出;由于之前产品不考虑低端手机情况,低端手机直接跑到崩溃,直接体现的是DAU的急速下降;最终在竞品的对比数据下,开始重视这块事情了,也给了我们半个月时间去优化性能。


目标:

       性能达到并且低于竞品的消耗值,并且能让低配用户也能玩起来。


这就是这篇文章的来源了,算作这一阶段优化后的个人总结吧,切入正题:我们都知道在短时间大改动的产品迭代期,性能问题会比较突出,特别是敏捷新功能开发,由于每个开发者都有自己的思维,最终如果在没有好的框架约束下,问题就会越来越多,滚雪球般,体现最明显的就是内存泄漏,布局层次过深,measure计算过多,动画绘制问题,io,自定义控件的draw里面对象创建,线程滥用,handler里面丢了个外部对象不清除,内部类与匿名类问题等,所以实战的第一步就是定位问题,而定位问题,最好的就是使用各种成熟工具:


首先介绍一下常用工具:

1、android studio/intellij里面的内存,cpu监控器

2、DDMS里面那一排的功能

3、MAT

4、手机的开发者模式下的各种选项

5、fiddle/wireshark等一些抓包的代理工具

6、其他辅助工具等

相信这些工具网上一搜一大把教程,不过这里我还是啰嗦下,毕竟用好工具是最重要的一步(因为解决大多性能问题就要靠技术积累去了解并改动代码实现了):

ps:下面只是简单介绍各个工具的功能,不会涉及过多工具的使用方法,如果需要查看使用方法的话麻烦大家google一下,如果对这些工具都比较熟悉的就可以不用看下面了,等接下来后续的实例分析和总结吧(┬_┬)


第一个,直接用IDE的cpu,内存监视器,也就是下图的这些monitor

启动方法:




通过运行app的过程中观察整个图表变化,如果有性能问题的可以很明显的看到线的走势图会出现异常,这个是最简单的查看器。

可用于查看:GC过程,内存分配,cpu使用real time等

  • Show a graph of available and allocated Java memory over time.
  • Show garbage collection (GC) events over time.
  • Initiate garbage collection events.
  • Quickly test whether app slowness might be related to excessive garbage collection events.
  • Quickly test whether app crashes may be related to running out of memory

具体使用方法可见官方文档:

https://developer.android.com/studio/profile/am-memory.html

https://developer.android.com/studio/profile/am-cpu.html


第二个:DDMS(重点)

启动方法:




这个里面功能很全,debug,抓布局,截屏,线程,抓性能数据,GPU样样都有,基本也是优化过程中用的最多的工具了

1、debug开关

2、在13(heap viewer)中显示当前内存状况

3、抓取当前时刻进程中内存数据,是dump下来hprof文件,这个文件就是要结合后面重点的MAT工具用来分析内存用的(重点)

4、垃圾回收,立即GC

5、在12(thread viewer)当中显示当前进程里面所有线程的运行状态(重点)

6、可以抓取一段时间内整体cpu使用状况(Traceview),用来分析方法在cpu的消耗情况(重点)

7、停止

8、截屏

9、获取当前手机布局整体的纬度,用来分析UI嵌套绘制树(重点)

10、这个工具需要积累一定的系统知识才能用的好,特别是要知道那些方法是处理界面UI,那些是处理资源调度什么的,因为这是对系统整体的综合追踪,开启过程中可以自己过滤一些分析对象,最终会生成一个网页文件,通过浏览器可以看到里面的图表结构,我主要是用这个分析webview的性能和vsync下UI卡顿原因的,这个vsync是什么后面会讲


11、分析GPU的绘制(硬解码好东东,分担cpu的)

12、线程展示框

13、内存展示框

14、对象分配展示框

15、网络使用框

16、文件浏览框

17、模拟机avd控制器

18、整体系统状态饼状图(CPU,内存,frame)


第三个MAT工具:

图标长的像eclipse的家伙,以前用eclipse可以直接从里面打开,好像这个工具就是eclipse这边搞的(错了勿喷哈)

工具官方地址:http://www.eclipse.org/mat/

这个工具作用很重要,分析内存泄漏,还有整体内存状态就靠它了

打开上面我们用DDMS第三个功能dump下来的hprof文件后如下图样子:(原谅我从官网偷的图,注意ddms抓的hprof文件要用到android sdk的tools下面的hprof-conv.exe转换一下才行)



从这个工具里面我们可以看到当时应用中有哪些对象,而且用这个工具可以跟踪整个对象在GC root下整体引用过程,这块知识需要用到java的GC原理,用这个工具主要是用来找内存泄漏的,也就是通过这个工具,我可以知道应该要被回收的对象,为什么没有被回收,它的引用树是什么样的,这样就能去代码中定位问题所在了,还有可以用这个工具看看对象内存的使用情况,分析哪些对象可以用对象池,哪些对象new的数目特别多等




第四个:安卓手机里面的开发者模式



这个工具可以直接很直观的看过度绘制,cpu内存使用情况,各个布局的边界,surface更新闪烁,不保留活动等,主要用来直观的看出APP的运行状况,还有home回首页后的activity调试,重点主要还是分析过度绘制

下面给出开启了过度绘制验证时候的界面颜色分析图吧:

ps:无色还有可能是用了surfaceview这种另外的window层




第五个:抓包工具:

这个主要是针对webview,还有各种网络通信的时候使用,用来分析包的情况还有数据请求情况,可以发现很多请求是否必要或者能够减少请求频率,减少回复大小,达到减少解析或者压缩的cpu损失

fiddle工具如图:左侧为请求区,右侧为协议内部内容,这个主要是对http和https的




第六个:其他工具

先说一个:电量统计battery-historian

地址:https://github.com/google/battery-historian

这个工具依赖万能的adb,其他工具实际上也就是都利用adb的,只不过更视图可视化了,如果adb用的溜,那确实可以直接在命令行中就可以看很多数据了

这里就举例说下性能调试中对电量使用获取的方法吧:

先初始化

adb shell dumpsys batterystats --enable full-wake-history
shell dumpsys batterystats --reset

然后运行app一段时间后利用bugreport日志可以导出

adb bugreport > bugreport.txt

打开txt可以找到这段话


这个就是可以看出电量使用情况了,但是既然说了上面有个工具,那肯定要用上啦,


使用上面的工具转换成html可以更方便查看(ps:上面的工具是python的,需要配置下python环境)

python historian.py -a bugreport.txt > batteryhistory.html

原谅我盗用了作者的图,里面可以统计很多信息:


具体要分析什么,大家可以看github上作者对每个功能的详细介绍吧。


好了,性能分析前篇准备工作就是熟悉工具,以及会使用工具抓分析数据,接下来就是一些理论和实战的东西了,工具分析就到这了,如果大家需要我出一套工具的详细使用方法那就多留言吧,我争取可以抽时间出来针对每一个工具都做个详细分析~


author:iamwsbear@gmail.com

转载必须注明出处:本文地址:http://blog.csdn.net/iamws/article/details/51629160







### 回答1: Android 性能优化实战篇 PDF 是一本介绍如何优化 Android 应用性能的电子书。该书通过实践经验和案例分析,向读者提供了一系列提高应用性能的实用技巧和方法。 该书首先介绍了性能优化的基本概念,例如应用启动时间、内存管理、网络请求和绘制性能等方面。之后,通过对真实应用情景的分析,详细介绍了一些常见的性能问题,并给出了相应的解决方案。 对于应用启动时间的优化,该书提供了一些切实可行的建议。例如合理使用启动模式、使用冷启动的启动动画、减少启动时的初始化操作等。这些方法可以明显减少应用的启动时间,提升用户体验。 在内存管理方面,该书介绍了如何减少内存泄漏和优化内存占用。通过使用合适的数据结构、避免频繁的对象创建和销毁、注意资源的主动释放等方法,可以有效地减少内存开销,提高应用的稳定性和响应速度。 对于网络请求的优化,该书提供了一些网络请求的最佳实践。例如使用合适的网络请求库、优化请求的并发性、合理使用缓存等。这些方法可以减少网络请求的时间,提高数据加载速度,提升用户体验。 对于绘制性能优化,该书介绍了如何优化布局和渲染过程,提高界面的流畅度。例如使用合适的布局容器、避免过度绘制、使用硬件加速等。这些方法可以减少界面卡顿和掉帧现象,提升应用的视觉效果。 总而言之,Android 性能优化实战篇 PDF 提供了一些宝贵的经验和方法,帮助开发者优化应用的性能,提升用户体验。不仅可以帮助开发者理解性能优化的基本原理,还给出了一些具体的解决方案,对于 Android 应用的开发和优化都非常有帮助。 ### 回答2: 《Android性能优化实战篇》是一本针对Android开发者的重要参考书籍,旨在帮助开发者提升应用性能,提高用户体验。该书内容包含以下几个方面: 1. 性能分析工具:介绍了常用的性能分析工具,如Android Profiler、TraceView等。通过使用这些工具,开发者可以监测应用在不同场景下的性能情况,例如CPU占用、内存使用、网络请求等,从而快速定位并解决性能问题。 2. UI性能优化:详细介绍了Android UI渲染原理以及优化方法。通过合理使用View的绘制流程、减少UI层级和View的复杂度、适当使用缓存等方法,可以提升UI渲染的速度,提高应用的响应性。 3. 内存优化:介绍了内存泄漏的原因及排查方法,提供了避免内存泄漏的最佳实践。此外,还介绍了内存管理机制以及如何合理地使用内存,包括优化Bitmap的加载、使用SparseArray替代HashMap等。 4. 网络优化:讨论了网络请求中存在的性能问题,并提供了相应的解决方法。例如,合理使用缓存技术、减少网络请求的频率、使用多线程进行并发请求等。 通过学习《Android性能优化实战篇》,开发者可以更全面地了解和掌握Android性能优化的方法与技巧,并能够针对具体场景中的性能问题进行准确的分析和解决。这对于提高应用的性能和用户体验具有重要意义。 ### 回答3: 《Android性能优化实战篇》是一本介绍如何提升Android应用性能实战指南,旨在帮助开发人员通过一系列优化技巧和方法,使应用在运行时更加稳定和高效。 该书首先介绍了性能优化的基本概念和原则,包括优化目标、优化思路等。然后详细讲解了Android系统的性能优化核心内容,如内存优化CPU优化、网络优化等。其中涉及到了一些基本的工具和技术,如内存泄漏的检测与优化、多线程优化、数据缓存等。同时,该书还提供了一些优化实例,通过示例展示了具体的优化方法和效果。 对于开发人员来说,优化应用的性能是一个非常重要的任务,能够提高用户的体验度和应用的竞争力。《Android性能优化实战篇》通过详细的指导和实例,帮助读者快速理解和掌握性能优化的基本方法和技巧,同时提供了大量实战经验和案例,让读者能够更加深入地了解优化的过程和效果。 总而言之,该书是一本非常实用的Android性能优化指南,对于开发人员来说是一本必备的参考书籍。通过阅读该书,开发人员能够系统地学习和掌握Android应用的性能优化方法,提高应用的性能和质量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值