Android开发系列之性能优化

时间:2022-12-20 19:32:19

一直想整理一篇关于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命令分析系统状态

Android开发系列之性能优化的更多相关文章

  1. 在 Android开发中,性能优化策略十分重要

    在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...

  2. iOS开发系列之性能优化(上)

    本篇主要记录一下我对界面优化上的一些探索.关于时间优化的探索将会在中篇里进行介绍.下篇将主要介绍一些耗电优化.安装包瘦身的探索. ### 1.卡顿原理 要了解卡顿原理,需要对帧缓冲区.垂直同步.CPU ...

  3. Android比较实用的性能优化

    Android设备作为一种移动设备,无论是内存还是CPU的性能都受到了很大的限制,这导致Android程序的性能问题异常突出,随着产品的不断更新迭代,对于性能优化提出了更高的要求.本篇文章从稳定性.流 ...

  4. Android 开发系列教程之(一)Android基础知识

    什么是Android Android一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是And ...

  5. 使用ThinkPHP开发中MySQL性能优化的最佳21条经验

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  6. Android学习笔记&lowbar;52&lowbar;全面了解Android开发规范:性能及UI优化

    一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能 ...

  7. Windows phone应用开发&lbrack;21&rsqb;-图片性能优化

    在windows phone 中常在列表中会常包含比较丰富文字和图片混排数据信息. 针对列表数据中除了谈到listbox等控件自身数据虚拟化问题外.虽然wp硬件设备随着SDK 8.0 发布得到应用可使 ...

  8. &lbrack;Android开发系列&rsqb;IT博客应用

    1.关于坑 好吧,在此之前先来说一下,之前开的坑,恩,确实是坑,前面开的两个android开发教程的坑,对不起,实在是没什么动力了,不过源码都有的,大家可以参照github这个应用 https://g ...

  9. Android开发系列之按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

随机推荐

  1. java中调用xml的方法:DocumentBuilderFactory

    具体的使用方法如下: (1)得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance(); (2 ...

  2. MDX语法之排序函数Order

    使用场景: 排列指定集的成员,可以选择保留或打乱原有的层次结构. 语法: Numeric expression syntax Order(Set_Expression, Numeric_Express ...

  3. 如何设置一个严格30分钟过期的Session(转载)

    本文地址: http://www.laruence.com/2012/01/10/2469.html 今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: &quo ...

  4. html&period;day02

    1.链接标签  a <a href=”http://www.baidu.com”></a> <img src=”aaa”/> 一般情况下:  来源  用 src   ...

  5. enex 转 md 格式的几种方式&lpar;免费版&sol;氪金版&rpar;

    因为最近有读者投稿,用的是印象笔记,文件格式为 .enex ,一般发文章都用 markdown 格式,这叫我好生苦恼,于是乎,Google 搜了一下,找到了如下解决办法. 氪金版: 我只找到了一款比较 ...

  6. Confluence 6 Oracle 连接问题解决

    如果 Confluence 提示没有 class 文件,你可能将你的 JDBC 驱动放置到了错误的文件夹. 下面的页面包含了一些你在使用 Oracle 数据库连接的时候可能会遇到的常见问题,请参考: ...

  7. dojo小代码

    RunSource Using event delegation on an HTML table to highlight rows and columns. ------------------- ...

  8. 译&colon; 6&period; RabbitMQ Spring AMQP 之 RPC

    Remote procedure call (RPC) 在第二篇教程中,我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这是一 ...

  9. CSS 自适应

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Spring中applicationContext&period;xml的bean里的id和name属性区别

    转自:http://www.cnblogs.com/ztf2008/archive/2009/02/11/1388003.html <beans><bean id="per ...