zoukankan      html  css  js  c++  java
  • Android开发系列之性能优化

          一直想整理一篇关于Android性能优化的博客,正好今天借鉴一些书籍资料,总结一下自己对于这块的一些认识。相信大家都听说过16ms的原则,即每两个画面之间的绘制时间间隔不能超过16ms,否则人眼能够感觉到明显的卡顿。基于这个角度出发,我们将从一下三个方面进行分析性能优化的问题。

          布局优化,避免OverDraw就是过度绘制,比如一个Activity里面,你针对一个控件重复设置了背景颜色那么就属于OverDraw了。在Android中,系统针对View进行测量、布局和绘制时,都是通过对View数的遍历来进行操作的。如果一个View树的高度太高,就会严重影响测量、布局和绘制的速度,Google也在其Api建议View树的高度不宜超过10层。所以我们在进行布局的时候,尽量减少View的高度,可以使用include标签重用Layout,或者使用ViewStub标签实现View的延迟加载。可以通过Hierachyviewer工具来检测视图树,从而找出冗余的布局。

          内存优化,首先我们来看一下Android的内存分类:堆(GC托管),栈,寄存器,静态存储区域,常量池。针对内存优化,我们又可以区分一下两种场景:大文件压缩缓存机制和代码优化。大文件压缩缓存机制是什么意思呢?比如Bitmap加载大图片的时候,我们可以在BitmapFactory里面设置一定的压缩参数,然后在Bitmap对象使用完成以后,手动调用recycle()方法释放内存资源。最后还可以使用缓存机制LruCache和DiskLruCache两种机制可以更好的使用Bitmap,下面我们来详细列举一下代码优化的实例。

    • 对常量使用statis修饰符(这点笔者持保守意见,因为static变量的加载、驻留时间)
    • 使用静态方法,会比普通方法提高15%左右的访问速度(这点笔者也是持保守意见,同上)
    • 减少不必要的成员变量(这点也符合重构与设计的出发标准)
    • 减少不必要的对象(同上)
    • 尽量少用枚举、迭代器
    • 对Cursor、Receiver、Sensor、File等对象,要注意创建和回收,注册和取消注册
    • 避免使用IOC框架
    • 使用RenderScript、OpenGL来进行非常复杂的绘图操作
    • 使用SurfaceView代替View来进行大量、频繁的绘图操作
    • 使用视图缓存来代替每次执行inflate()方法解析视图

        性能优化的工具介绍:

    • Lint工具,布局代码检测
    • AS自带的Memory Monitor工具,内存检测
    • TraceView工具,生成日志优化APP性能
    • MAT工具,分析App内存状态
    • Dumpsys命令分析系统状态
  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/xiaocai20091687/p/xiaocai_android_new_9.html
Copyright © 2011-2022 走看看