Android开发Android开发经验谈Android技术知识

Android性能优化整理

2020-04-03  本文已影响0人  卡路fly

高质量的应用目标:快、稳、省、小


1. 卡顿优化

归根结底:现实问题

Android系统显示原理

应用层绘制好后,通过跨进程通信把需要的数据传递到系统层,通过系统层的SurfaceFlinger把数据渲染到显示屏幕上,通过Android的刷新机制来刷新数据。

应用层

绘制方式

应用层GPU绘制缺点:

  1. 耗电
    GPU功耗比CPU高

  2. 兼容问题
    某些接口和函数不支持硬件加速

  3. 内存大
    使用OpenGL接口至少需要8MB内存

绘制过程

系统层

通过系统级进程中的SurfaceFlinger服务来真正把需要显示的数据渲染到屏幕上


刷新机制

双缓冲

Framebuffer带来残影问题

VSYNC(Vertical Synchronization)

CPU主动查询保证数据是否准备好,效率低
定时中断,收到信号,CPU处理各帧数据

Choreographer:起调度作用

收到VSYNC信号,调用用户设置的回调函数


卡顿根本原因

  1. 绘制任务太重,绘制一帧内容耗时太长
  2. 主线程太忙,根据系统传递过来的VSYNC信号来时还没准备好数据导致丢帧。

主线程主要做以下几个方面工作

  • UI生命周期控制
  • 系统事件处理
  • 消息处理
  • 界面布局
  • 界面绘制
  • 界面刷新
  • 除此之外,应该尽量避免将其他处理放在主线程中,特别复杂的数据计算和网络请求等。

性能分析工具

1. Profile GPU Rendering

2. TraceView

3. Systrace


卡顿优化建议

1 布局优化(HieracrchyViewer&Lint)

2 避免过度绘制

过度绘制
在屏幕上的某个像素在同一帧的时间内被绘制了多次,从而浪费了多余的CPU以及GPU。

布局上的优化:

自定义View优化:
使用 canvas.clipRect()来帮助系统识别那些可见的区域,只有在这个区域内才会被绘制。

开发者选项:调试GPU过度重绘

3 启动优化

4 合理的刷新机制

5 提升动画性能


2. 内存优化

Android内存管理机制

工具1 Memory Monitor

Memory Monitor是一款使用非常简单的图形化工具,可以很好地监控系统或应用的内存使用情况,主要有以下功能:

  • 显示可用和已用内存,并且以时间为维度实时反应内存分配和回收情况。
  • 快速判断应用程序的运行缓慢是否由于过度的内存回收导致。
  • 快速判断应用是否由于内存不足导致程序崩溃。

工具2 Heap Viewer

Heap Viewer的主要功能是查看不同数据类型在内存中的使用情况,可以看到当前进程中的Heap Size的情况,分别有哪些类型的数据,以及各种类型数据占比情况。通过分析这些数据来找到大的内存对象,再进一步分析这些大对象,进而通过优化减少内存开销,也可以通过数据的变化发现内存泄漏。

工具3 Allocation Tracker

Memory Monitor和Heap Viewer都可以很直观且实时地监控内存使用情况,还能发现内存问题,但发现内存问题后不能再进一步找到原因,或者发现一块异常内存,但不能区别是否正常,同时在发现问题后,也不能定位到具体的类和方法。这时就需要使用另一个内存分析工具Allocation Tracker,进行更详细的分析,Allocation Tracker可以分配跟踪记录应用程序的内存分配,并列出了它们的调用堆栈,可以查看所有对象内存分配的周期

工具4 Memory Analyzer Tool(MAT)

MAT是一个快速,功能丰富的Java Heap分析工具,通过分析Java进程的内存快照HPROF分析,从众多的对象中分析,快速计算出在内存中对象占用的大小,查看哪些对象不能被垃圾收集器回收,并可以通过视图直观地查看可能造成这种结果的对象。


常见内存泄漏场景


LeakCanary 第三方开源库

这是一个检测内存泄漏的开源库,可以在发生内存泄漏时告警,并且生成leak tarce分析泄漏位置,同时可以提供Dump文件进行分析。


优化内存空间


3. 稳定性优化


4. 耗电优化

--

5. 安装包大小瘦身


上一篇 下一篇

猜你喜欢

热点阅读