Android日记Android TipsAPP优化

Android性能优化学习笔记

2017-03-17  本文已影响991人  Android开发哥

参考

Android App优化, 要怎么做?

优化类型

工具

性能分析工具

官方

名称 作用 说明 参考
StrictMode 主要用来做主线程优化分析 一般用来检测主线程中的耗 时操作和阻塞.结果在Log console输出一些警告 官方文档
Systrace 分析UI的绘制时间, 发现耗时操作, 结合Hierarchy Viewer来提升UI性能 Systrace是一个收集和检测时间信息的工具, 它能显示CPU和时间被消耗在哪儿了, 每个进程和线程都在其CPU时间片内做了什么事儿. 而且会指示哪个地方出了问题, 以及给出Fix建议. 文档 文档 文档
Hierarchy Viewer 用来做View层级分析, 可以分析出View Tree中的性能阻塞点, 以便对症下药, 提升布局性能. Hierarchy Viewer需要Root的机器(产品机没有开启ViewServer)才可以执行.可以使用第三方的开源的ViewServer来协助我们在未Root的机器上使用Hierarchy Viewer分析. 文档 文档 文档 文档
TraceView 分析方法调用栈以及其执行时间, 优化方法执行. 一个图形化的工具, 用来展示和分析方法的执行时间. 文档 文档
Memory Monitor 用来做内存分析, 内存泄露排查的不二之选. 可以结合heap viewer, allocation tracker来分析. 内存使用检测器, 可以实时检测当前Application的内存使用和释放等信息, 并以图形化界面展示. 文档 文档 文档
Other Monitor 分别用来跟踪监测CPU,GPU和Network的使用极其变化, 可以作为网络优化, 流量优化和渲染优化等的一个指导 Android Studio的Monitor还提供了其他三个Motinor --- CPU, GPU, Network. CPU GPU Network
Systrace Hierarchy Viewer Memory Monitor 其他

第三方

名称 作用 说明 文档
Historian 用来做电量使用分析. Google出品, 通过Android系统的bugreport文件来做电量使用分析的工具. Github
Emmagee 比官方工具更适合国人使用来做App的整体性能分析. 针对Android App的CPU, 内存, 网络, 电量等多项综合的测试分析. Github
leakcanary 集成到App中, 用来做内存问题预防最好不过了. 类似与App探针的内存泄露监测工具. Github
AndroidDevMetrics 如果你的应用使用的Dagger2, 这个就比较必要了. 一个library, 用来检测Activity生命周期执行性能, Dagger2注入性能以及帧率性能的工具. Github

APP启动优化

主要方面


APP启动方式

Application的OnCreate

因为Application的OnCreate一般会初始化大量的集成SDK,此时需要耗费大量CPU事件.

解决方法
启动一个主进程的Service帮忙初始化SDK,推荐使用IntentService


首屏页的渲染

首屏页作为,APP启动的第一个页面.在应用切换过程中,默认出现白屏(取决于windowBackground属性).

解决方法

使用TraceView

DDMS启动

DDMS启动

代码打桩启动

// 在自己想要开始调试的地方start
Debug.startMethodTracing("filename");

// 在合适的地方stop
Debug.stopMethodTracing();

filename是dump到内存的数据文件,一般在sdcard的根目录,如果找不到可以使用find / -name filename查找

把文件拉倒本地,就可以用DDMS打开了

指标说明

CPU Time 方法实际执行时间(不包括io等待时间)
Real Time 方法开始结束时间差(包括等待时间)

一般来说, 我们使用Real Time/Call排序来找出耗时多的方法

布局优化

Hierarchy Viewer

Hierarchy Viewer只能在root过的机器上使用,因为需要View Server.

解决方案是项目中集成ViewServer

启动

打开HV

界面

主页面

参数解读

参数解读

如果你的界面的Tree View中红点较多, 那就需要注意了. 一般来说:

Lint tool

启动

启动

分析

分析 分析

布局优化

尽量减少布局层级和复杂度

善用Tag

ANR问题

原因

解决方法

不能在主线程(UI线程)里面做频繁操作

分析

ANR产生时会把日志写到/data/anr/traces.txt

常见原因

执行在主线程的

内存优化

Android虚拟机

ART相比Dalvik的关键提升:

Android内存管理

APP的内存分配和回收

APP内存限制

获取方法

dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=192m
dalvik.vm.heapsize=512m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=2m
dalvik.vm.heapmaxfree=8m

Android进程级别

根据进程的优先级不同而进行回收, 重要程度由高到低:

进程类型 说明
前台进程 用户当前操作所必需的进程.
可见进程 没有任何前台组件, 但仍会影响用户在屏幕上所见内容的进程
服务进程 正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程
后台进程 包含目前对用户不可见的 Activity 的进程(已调用 Activity 的 onStop() 方法)。这些进程对用户体验没有直接影响
空进程 不含任何活动应用组件的进程。保留这种进程的的唯一目的是用作缓存,以缩短下次在其中运行组件所需的启动时间。

分析工具

Android Studio


MAT

下载地址

LeakCanary

LeakCanary Github

电量优化

battery-historian Github

上一篇下一篇

猜你喜欢

热点阅读