Android性能优化一些理解

注:之前对Android的优化有了解,工具也懂,就是分析不太熟练,无从下手的感觉,看了Google Android 性能优化 的视频,比较系统的学习了这块,感觉有的时候能力到了在看收获比较大,特作学习备注。

Render 渲染

  1. Android 屏幕 每秒刷新60hz,相当于16ms渲染,超过16ms,将在下次16ms中刷新,故产生卡顿。
  2. cpu gpu 必须遵守相应的规则才能发挥正确的作用
    cpu: 重建显示列表次数过多,二是花费太多的时间作废视图层次,并进行不需要的重绘。
    gpu: 透支、多度绘制,过度着色的时候,浪费gpu处理时间。
  3. Android的绘制原理:是将图像进行栅格化(Rasterization),拆分到不同的像素上在屏幕上进行显示。栅格化是一项非常耗时的操作。设备中gpu就是为了加速栅格化这个操作的。cpu在处理之前会发送一些指令给gpu,这一过程通常使用的API就是Android中的OpenGL ES。
  4. 可以通过 “开发者模式” 中打开 “GPU绘制”,观察界面颜色,检测应用是否过度绘制。
image_4.jpg
  1. Canvas.clipRect 帮助你识别给定View的图形边界。边界之外的区域任何绘制操作会被忽略。不用懂得重叠原理,通过 Canvas.quickReject 可以判断给定区域是否完全在剪辑矩形之外。
    通过Canvas.clipRect可以实现如下效果:
image_5_1.png
image_5_2.png
  1. hierachy Viewer检测

Compute 计算

执行浮点型的运算是整数或boolean数值的4倍,原因在于芯片架构,当然有些时候需要你理解底层的结构。为了优化你的代码,你需要理解系统是如何运行代码的。

  1. 缓慢的函数执行通常有两方面问题造成:
1.执行速度缓慢的函数。
2.成千上百个函数。需要进行分析,各个击破
  1. TraceView
    我们能得到的信息:直观了解到每个线程中方法的执行时间。
TraceView的两种使用方式:

方法一:

  通过DDMS 选择需要检测的包名,点击"start method profiling",操作应用中需要检测耗时的逻辑,再次点击 "stop method profiling" 生成 .trace检测图标
通常看的几个信息点:
  1.条形的宽度表示方法的执行时间
  2.excl CPU time 独占CPU时间: 执行方法本身所用的时间,Incl CPU time 减去内部所有函数所用时间
  3.incl CPU time 非独占CPU时间: 这个函数和函数中所有在其内部调用的所有方法所用的时间。
  4.call and recursion 方法调用了多少次,或递归调用了多少次

方法二:

Trace.beginSection("Data structures");
...//需要检测时间的代码
Trace.endSection();
  1. batching and caching 批处理和缓存
 批处理能很大程度上解决每个运算的独立执行开销。

 缓存
  1. 将耗时操作从UI移除:解码图像是一项艰巨的任务。这也是我们不能轻易优化的任务。对于长时间运行的任务,尤其是那些涉及到网络访问、冗长的数据库调用和图像处理的任务,一般的规则是将它们从主线程中移走

  2. Java中使用适当的集合容器:

image_6.png

存储和修改应用程序数据的代码的性能问题

Memory GC and Performance

  1. 内存泄漏:通常指无法被释放的内存块。

  2. 内存溢出:申请的对象内存过大超过了剩余可用内存,内存泄漏会缓慢吞噬程序中可用内存,最终也会造成内存溢出。如下图

image_9.png
  1. Java中通常不需要我们去管理操作申请、释放内存。随着应用的操作进行,系统会自动处理内存的清理。当大量GC操作的时候,很产生很大程度上的掉帧(超过16ms的呈像刷新)。

  2. 为了减少任意帧内启动GC的次数,需要着重优化程序的内存使用量。
    这里推荐 “Memory Monitor”工具 可以大体直观得到程序在一段时间内占用的内存

image_7.png
一个图形显示java内存的时间。
显示垃圾收集(GC)事件随着时间的推移。
快速测试APP是否慢可能与过度的垃圾收集事件有关。
快速测试应用程序崩溃是否与内存耗尽有关。
  1. Heap Viewer 检测程序详细的内存占用
    Heap Viewer可以清楚的显示分配的类型、数量以及各自在堆中的容量。
image_8.png
 Android studio中打开DDMS
 1.图3 显示当前可用对象,以及个数占用的大小
 2.图4 显示这一数据的内存分配的数量
  1. 先用 Memory Monitor观察 在用Heap Viewer
    检测

  2. Allocation Tracker 分配追踪 Heap Viewer不能显示内存具体分配的代码的何处,所以有了Allocation Tracker工具.

Allocation Tracker

  1. Tool Strengths
     1.Memory Monitor 比较好的方式展示内存变化的动态视图。
     2.heap Viewer 比较好的展示详细数据在你的堆中。
     3.Allocation tracker 定位内存在你的代码中。
    
  2. MAT工具的使用以及多hprof对比检测内存泄漏

推荐 内存分析工具 MAT 的使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容