Android性能优化回顾

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dhd040805/article/details/54288813

一、布局优化

  1. ui渲染机制:Android系统通过VSYNC信号触发对UI的渲染,重绘,时间间隔是16ms,如果系统每次渲染的时间都保持在16ms之内,我们看到的UI效果就是流畅的,否则就会出现卡顿。
  2. 避免过度绘制:可以通过开发者选项中的Enable GPU Overdraw来判断是否有过度绘制的UI,如图,尽量减少红色区域这里写图片描述
  3. 优化布局层级:Android系统对View的测量,布局和绘制时,都是通过View的数量的遍历来操作的,如果View的高度太高,就会严重影响测量,布局和绘制的速度。
  4. 避免嵌套过多的无用布局,嵌套布局会增加View树的高度。
  5. 使用复用布局,将使用频率大的布局抽取出来单独成一个布局,以后使用只要include进去就行
  6. 使用 实现布局延迟加载,试过这个标签的布局,初始化的时候该布局不会显示,只有在代码中使用findViewById找到view然后Visiable后才会显示,或者使用inflate填充让该布局显示
  7. 使用HierarchyViewer优化布局,使用之后可快速找到冗余的布局,如果手机上无法使用HierarchyViewer,可以下载View Server,通过这个程序可以让普通手机能使用HierarchyViewer,下载地址:[www.github.com/romainguy/ViewServer]

二、内存优化

  1. 我们通常说的内存优化一般是优化RAM,他包含寄存器,堆,栈,静态存储区域,常量池,当定义了一个变量,java虚拟机就会在栈中分配内存空间,当该变量作用域结束后,这部分内存就会马上被用作新的空间进行分配,如果使用new 的方式创建一个变量,那么就会在堆中为这个对象分配内存空间,即使该对象的作用域结束,这部分内存也不会立即被回收,而是等待系统GC回收,平时所说的内存分析就是Heap堆内存的状态,获取堆内存大小的代码如下:`ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);int heapSize = manager.getLargeMemoryClass();
  2. 内存回收,Java创建了GC系统来自动进行资源的管理,大大降低程序开发人员的对内存管理的繁琐工作。但是缺点是,JVM虽然能够自动GC,但是,如果有些内存不能及时GC,就会导致内存泄露
  3. Bitmap优化:使用适当分辨率大小的图片,在适当的时候显示合适大小的图片,比如,在看图片列表的时候只显示缩略图thumbnails,而点击查看大图的时候再显示原图,在对图像要求不高的地方,降低图片的精度。同时,一旦使用完bitmap后,要及时调用bitmap.recycle()释放内存,最后,还可以通过内存缓存和硬盘缓存更好的处理bitmap
  4. 代码优化:
    a.对常量使用static修饰,
    b.使用静态方法可以提高15%左右访问速度
    c.减少不必要的成员变量,如果一个变量可以定义为局部变量,就不要定义为成员变量,
    e.尽量不要使用枚举,少用迭代器,
    f.对Cursor、receiver、Sensor、File等对象,要注意他们的创建回收和注册,
    g.避免使用IOC框架,IOC框架一般用反射来进行实现,大量反射会降低性能,
    h.使用RenderScript、OpenGL来进行非复杂的绘图操作,
    i.使用surfaceView代替View进行大量频繁的绘图操作,
    j.尽量使用视图缓存,而不是每次都执行inflate()方法解析视图

  5. Android Lint工具是AS集成的一个Android代码提示工具,他可以对你的布局,代码提供非常强大的帮助,平时养成使用lint的习惯

  6. 使用AS自带的Memory Monitor工具分析内存,如图蓝色部分代表free内存,深色部分可以判断内存的使用状态,比如内存持续增高时,可能发生内存泄露,内存突然减少时,发生GC等memory内存图
  7. 使用可视化性能调查工具,TraceView优化APP性能,生成Traceview日志有两种方法,一个是利用Debug类帮助生成日志,另一个是使用Android Device Monitor工具辅助生成日志。
    (1)使用debug类的方法开启TraceView监听,可以在生命周期的Oncreate()中通过Debug.startMethodTracing()方法来开启监听,在Ondestory()中通过Debug.stopMethodTracing()停止监听,
    (2)通过Android Device Monitor生成TraceView日志,打开AS的Android Device Monitor工具,选择要调试的进程,点击工具栏中的start method prifiling按钮,点击后,选择监听模式DDMS打开入口

    开启抽样监听图
    停止监听后界面会自动显示监听到的结果,如下图
    监听结果图
    上面部分的黑色条纹的是时间轴区域,不同的色块,代表不同的执行方法,色块的长度代表方法执行的时间
    下部分Name框以内的为Profile区域,主要显示了对应色块所处时间段内的性能分析
    这里写图片描述
    每个时间都包含两列,一个是实际的时间,一个是占的百分比,分析的时候,通常从Incl Cpu Time和Calls +RecurCalls开始进行分析,对占用时间长的方法进行重点分析,如果占用时间长,Calls+RecurCalls次数少,那么就是值得分析的对象了

  8. Mat工具也是一个分析内存的很不错的助力,具体使用以后再做详细介绍

猜你喜欢

转载自blog.csdn.net/dhd040805/article/details/54288813