android性能优化小结
来源:互联网 发布:社交软件用户数据 编辑:程序博客网 时间:2024/05/18 16:18
第一次写文章,主要是记忆自己看书的总结
android性能优化方法
1.布局优化
布局优化的思想很简单,就是尽量减少布局文件的层级,布局中的层级少了,就意味着android绘制时的工作量少了,那么程序的性能自如就提高了。
如何优化?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如RelativeLayout。如果布局中既可以使用LinearLayout也可以使用RelativeLayout,那么就采用LinearLayout,这个因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间,FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup。如果需要通过嵌套的方式完成,这种情况建议采用RelativeLayout,ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。
布局优化的另外一种手段是采用<include><merge>和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以降低减少布局的层级,而ViewStub则提供了按需求加载的功能,当需要时才会将ViewStub中的布局加载到内存,这提高了程序的初始化效率。
2.绘制优化
绘制优化是指View的onDraw方法要避免执行大量的操作,主要体现在这两个方面:
首先,onDraw中不要创建新的局部对象,这个因为onDraw方法可能会被频繁调用,这样就会一瞬间产生大量的临时对象,不仅占用了过多的内存而且还会导致系统更加频繁gc,降低了程序的执行效率。
另外一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万的循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这样会造成View的绘制过程不流畅。
3.内存泄露优化
内存泄露在开发过程中是一个需要重视的问题。内存泄露的优化分两个方面,一方面是在开发中避免写出内存泄露的代码,另外一方面是用过一些分析工具比如MAT来找出潜在的内存泄露继而解决。
场景一: 静态变量导致的内存泄露
场景二:单例模式导致的内存泄露(单例模式的特点是其生命周期和Application保持一致)
场景三:属性动画导致的内存泄露(在onDestroy中停止动画)
4.响应速度优化和ANR日志分析
响应速度优化的核心思想是避免在主线程中做耗时操作。发生了ANR,系统会在/data/anr目录下创建一个文件traces.text,通过分析这个文件可以定位ANR的原因。
5.Lisview和Bitmap优化
ListView的优化主要分为三个方面:首先要采用ViewHolder并避免在getView中执行耗时操作;其次要根据列表的滑动状态来控制任务的执行频率,比如当列表快速滑动时陷入是不太合适开启大量的异步任务;最后可以尝试开启硬件加速来使ListView的滑动更加流畅。ListView的优化策略完全适用于GridView。
Bitmap的优化主要是用过BitmapFactory.Options来根据需要对图片进行采样,采样过程中主要用到了BitmapFactory.Options的inSampleSize参数。
6.线程优化
线程优化的思想是采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁所带来的性能开销,同时线程池还能有效的控制线程池的最大并发数,避免大量的线程因互相抢占系统资源从而导致阻塞现象的发生。因此,在实际开发中,我们尽量采用线程池,而不是每次都要创建一个Thread对象。
7.一些性能优化建议
避免创建过的对象
不要过多的使用枚举,枚举占用的内存空间比整型大
常量请使用static final来修饰
使用一些Android特有的数据结构,比如SparseArray和Pair等,它们都是具有更好的性能
适当使用软引用和弱引用
采用内存缓存和磁盘缓存
尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露
- Android性能优化小结
- android性能优化小结
- Android性能优化小结
- Android应用性能优化小结
- Android性能优化 一 优化小结
- android UI布局的性能优化小结
- Android性能优化学习与实践小结
- javascript性能优化小结
- 数据库性能优化小结
- iOS性能优化小结
- web性能优化小结
- ASP.NET性能优化小结
- Tomcat 6 性能优化 小结
- Tomcat 6 性能优化 小结
- Tomcat 6 性能优化小结
- oracle 性能优化建议小结
- oracle 性能优化建议小结
- oracle 性能优化建议小结
- IOS 通过Image截图
- 03_二维数组的查找
- 从Java视角理解CPU上下文切换(Context Switch)
- css3 边框阴影 box-shadow
- 在Eclipse上的搭建Python开发环境
- android性能优化小结
- js实现放大镜
- dev_set_drvdata, dev_get_drvdata machanism
- The SDK platform-tools version (24.0.4) is too old to check APIs compiled
- Install DDclient Dynamic DNS (DDNS) Update Client in CentOS
- Java线程池
- 不确定性分析
- SQL自动异地备份、删除、还原数据库(利用代理作业)
- 支付宝pc端支付接入PHP实现