android性能优化工具

 


1 测CPU:方法耗时 traceView

 

使用 TraceView 查看耗时,主要关注 Calls+Recur Calls/Total Cpu Time/Call 这两个值,
也就是关注调用次数多和耗时久的方法,然后优化这些方法的逻辑和调用次数,减少耗时
 
 

2  UI卡顿情况 Systrace

 
 
 
 
1 Alerts
 Alerts 一栏标记了性能有问题的点, 
2 Frame
每个应用都有一行专门显示 frame ,每一帧就显示为一个绿色的圆圈。当显示为黄色或
者红色时,它的渲染时间超过了 16.6ms (即达不到 60fps 的水准)。 
如果想知道 UI 线程怎么会花费这么多时间的话,  讲到的 TraceView
来分析具体是哪些函数在消耗时间。
 

3 Ui层级  Lint查层级数目+ Hierarchy View具体分析一个层级耗时

lint

TooDeepLayout :表示布局太深,默认 层级超过 10 层会提示该问题,可以自定义环境
变量 ANDROID_LINT_MAX_DEPTH 来修改。布局深度增加会导致内存消耗也随之增加,因此
布局尽可能浅而宽。
· TooManyViews :表示控件太多,默认 超过 80 个控件 会提示该问题。
 
 
 
1 view 表示这个控件是这个树下的最后一个控件,即表示是
它本身,下面的时间表示 Measure Layout 以及 Draw 三个阶段的耗时。最后一个框有不同
色的三个指示灯,分别对应当前控件在测量、布局以及画视图三个阶段,颜色表示这个控件
占用的时间百分比,如果是绿色的,表示该控件在该阶段比其他 50% 的控件的速度要快,黄
色表示比其他 50% 的控件的速度要慢,红色表示该控件在该阶段的处理速度是最慢的,就需
要注意了。
 
 

代码编写减少层级规则:

1   按需RelativeLayout

 
 尽量使用 RelativeLayout LinearLayout
·在布局层级相同的情况下,使用 LinearLayout
·用 LinearLayout 有时会使嵌套层级变多,应该使用 RelativeLayout ,使界面尽
量扁平化。
 

2 在根元素上的Merge使用

如果 Merge 代替的布局元素为 LinearLayout ,在自定义布局代码中将
LinearLayout 的属性添加到引用上,如垂直或水平布局、背景色等
Merge 不是所有地方都可以任意使用,有以下几点要求:
· Merge 只能用在布局 XML 文件的根元素。
·使用 merge 来加载一个布局时,必须指定一个 ViewGroup 作为其父元素,并且
要设置加载的 attachToRoot 参数为 true (参照 inflate int ViewGroup boolean ))。
·不能在 ViewStub 中使用 Merge 标签。原因就是 ViewStub inflate 方法中根本没
attachToRoot 的设置。
 
 
 
 

3 提高显示速度 ViewStub

https://blog.csdn.net/mulanlong/article/details/88669172

ViewStub 是一个轻量级的 View ,它是一个看不见的,并且不占布局位置,占用资源非
常小的视图对象。可以为 ViewStub 指定一个布局,加载布局时,只有 ViewStub 会被初始化,
然后当 ViewStub 被设置为可见时,或是调用了 ViewStub.inflate ()时, ViewStub 所指向的
布局会被加载和实例化,然后 ViewStub 的布局属性都会传给它指向的布局。这样,就可以
使用 ViewStub 来设置是否显示某个布局。
ViewStub 显示有两种方式,上面代码使用的是 inflate 方法,也可以直接使用
ViewStub.setVisibiltity View.Visible )方法。
使用 ViewStub 时需要注意以下几点:
· ViewStub 只能加载一次,之后 ViewStub 对象会被置为空。换句话说,某个被 ViewStub
指定的布局被加载后,就不能再通过 ViewStub 来控制它了。所以它不适用于需要按需显示
隐藏的情况。
· ViewStub 只能用来加载一个布局文件,而不是某个具体的 View ,当然也可以把 View
写在某个布局文件中。如果想操作一个具体的 View ,还是使用 visibility 属性。
· VIewStub 中不能嵌套 Merge 标签。 不过这些限制都无伤大雅,我们还是能够用 ViewStub 来做很多事情, ViewStub 的主要
使用场景如下:
·在程序运行期间,某个布局在加载后,就不会有变化,除非销毁该页面再重新加
载。
·想要控制显示与隐藏的是一个布局文件,而非某个 View
 

4 布局复用 include   

titlebar

 

·布局的层级越少,加载速度越快。
·减少同一层级控件的数量,加载速度会变快。
·一个控件的属性越少,解析越快。
根据本节的分析,对优化的总结如下:
·尽量多使用 RelativeLayout LinearLayout ,不要使用绝对布局 AbsoluteLayout ·将可复用的组件抽取出来并通过 <include/> 标签使用。
·使用 <ViewStub/> 标签加载一些不常用的布局。
·使用 <merge/> 标签减少布局的嵌套层次。
·尽可能少用 wrap_content wrap_content 会增加布局 measure 时的计算成本,已
知宽高为固定值时,不用 wrap_content
·删除控件中的无用属性。
 
 

4 内存 memory monitor

 

内存分配与释放

大内存与抖动

 

  5 heap viewer 整体堆内存看大小

 

6 内存泄漏具体场景allocation tracker  跟踪

https://blog.csdn.net/hpc19950723/article/details/53542490

7内存分析工具MTA

https://www.cnblogs.com/linghu-java/articles/10565730.html

8代码编写

1. 资源性对象未关闭
2. 注册对象未注销
3. 类的静态变量持有大数据对象
4. 非静态内部类的静态实例
5.Handler 临时性内存泄漏
6. 容器中的对象没清理造成的内存泄漏

9 内存泄漏LeakCanary

https://www.jianshu.com/p/a5e69a2e093f

10 优化空间

对象引用:

强软弱

11减少内存使用

AutoBoxing自动装箱

 

内存复用

有效利用系统自带的资源
视图复用
对象池
Bitmap 对象的复用

数据类型优化

1 hashmap-arrayMap

https://www.cnblogs.com/clwydjgs/p/9185574.html

2 枚举类型

intDef  SrtingDef

3 LruCache

 

 图片内存优化

设置位图格式RGB_565

inSampleSize

inScaledinDensity inTargetDensity

inBitmap

bitmap复用

图片缓存

 

 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值