关于性能优化的笔记
2016-06-30 23:10
218 查看
笔记内容来源于《Android开发艺术探索》—非常好的一本书,力荐!
2、尽量使用性能弱的ViewGroup,
比如RelativeLayout功能复杂,它的布局就要比使用linearlayout花费CPU较多的时间,所以如果可以使用较弱的ViewGroup就尽量使用较弱的。
3、如果使用较弱的布局需要嵌套,那么还是建议使用RelativeLayout,因为嵌套同样会降低程序性能
这是因为onDraw方法会被频繁调用,这样就会在一瞬间产生大量临时对象,不但占用内存多还会导致频繁gc,导致程序效率降低
2、onDraw方法中不做耗时任务,也不能执行成千上万次的循环操作,这会导致View绘制不流畅。
谷歌官方建议,每帧的绘制时间不超过16ms,所以我们应当尽量降低onDraw方法的复杂度
2、根据滑动状态来控制任务执行频率,比如在用户频繁的无意义的滑动的时候不进行网络访问,当滑动停止的时候再发起网络请求
3、可以尝试开启硬件加速
当inSampleSize<1的时候,作用相当于1,即无缩放效果
当inSampleSize=1的时候,采样后的图片大小为图片的原始大小
当inSampleSize>1的时候,比如为2,采样后的图片大小为原图的1/2,而像素数为原图的1/4,它所占的内存也为原图的1/4
例:一个1024*1024像素的图片,如果使用ARGB8888格式存储,它所占内存是1024*1024*4=4MB
如果inSampleSize=2,那么采样后的大小是:512*512*4=1MB
官方建议这个值应该总是2的指数,比如:1,2,4,8,16
2、使用ImageLoader等带有缓存功能的框架,方便开发。
2、不要过多的使用枚举,枚举占用的 内存空间要比整形大
3、常量使用static final来修饰
4、使用android特有的数据结构,比如SparseArray和Pair,它们具有更好的性能
5、适当使用软引用和弱引用
6、采用内存缓存和磁盘缓存
7、尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏。
布局优化:
1、减少布局的嵌套使用<include>标签:将一个指定的布局文件加载到当前布局 使用<merge>标签:一般和<include>标签一起减少布局的层级,这个标签可以去掉多余的同类型布局, 比如include的linearlayout和根linearlayout的布局参数相同, 就可以使用这个标签来去掉多余的那一层linearlayout 使用ViewStub,在使用的时候再加载布局
2、尽量使用性能弱的ViewGroup,
比如RelativeLayout功能复杂,它的布局就要比使用linearlayout花费CPU较多的时间,所以如果可以使用较弱的ViewGroup就尽量使用较弱的。
3、如果使用较弱的布局需要嵌套,那么还是建议使用RelativeLayout,因为嵌套同样会降低程序性能
绘制优化:
1、onDraw方法中不要创建新的局部对象这是因为onDraw方法会被频繁调用,这样就会在一瞬间产生大量临时对象,不但占用内存多还会导致频繁gc,导致程序效率降低
2、onDraw方法中不做耗时任务,也不能执行成千上万次的循环操作,这会导致View绘制不流畅。
谷歌官方建议,每帧的绘制时间不超过16ms,所以我们应当尽量降低onDraw方法的复杂度
listview/gridview的优化:
1、避免在getview中执行耗时操作2、根据滑动状态来控制任务执行频率,比如在用户频繁的无意义的滑动的时候不进行网络访问,当滑动停止的时候再发起网络请求
3、可以尝试开启硬件加速
Bitmap的优化:
1、使用BitmapFactory.Options来根据需要对图片进行采样,采样过程中用到了一个inSampleSize参数,当inSampleSize<1的时候,作用相当于1,即无缩放效果
当inSampleSize=1的时候,采样后的图片大小为图片的原始大小
当inSampleSize>1的时候,比如为2,采样后的图片大小为原图的1/2,而像素数为原图的1/4,它所占的内存也为原图的1/4
例:一个1024*1024像素的图片,如果使用ARGB8888格式存储,它所占内存是1024*1024*4=4MB
如果inSampleSize=2,那么采样后的大小是:512*512*4=1MB
官方建议这个值应该总是2的指数,比如:1,2,4,8,16
2、使用ImageLoader等带有缓存功能的框架,方便开发。
线程优化:
尽量采用线程池,避免程序中存在大量Thread线程池的优点: 1、重用内部线程,避免线程创建和销毁带来的性能开销 2、可以有效的控制线程池的最大并发数,避免大量的线程因为互相抢占系统资源从而导致阻塞
其它优化:
1、避免过多的创建对象2、不要过多的使用枚举,枚举占用的 内存空间要比整形大
3、常量使用static final来修饰
4、使用android特有的数据结构,比如SparseArray和Pair,它们具有更好的性能
5、适当使用软引用和弱引用
强引用:直接对象引用 软引用:当一个对象只有软引用存在的时候,系统不足时此对象会被gc回收 弱引用:当一个对象只有弱引用存在时,此对象会随时被gc回收
6、采用内存缓存和磁盘缓存
7、尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏。
相关文章推荐
- 深入理解PHP7内核之FAST_ZPP
- Flex 性能优化常用手法总结
- oracle 性能优化建议小结
- Lua性能优化技巧(一):前言
- Lua性能优化技巧(五):削减、重用和回收
- Lua性能优化技巧(三):关于表
- Lua性能优化技巧(四):关于字符串
- SQL Server 2016 查询存储性能优化小结
- MySQL性能优化 出题业务SQL优化
- PowerShell脚本性能优化技巧总结
- SQL SERVER性能优化综述(很好的总结,不要错过哦)第1/3页
- MySQL Index Condition Pushdown(ICP)性能优化方法实例
- Ajax无刷新分页的性能优化方法
- dedecms负载性能优化实例,三招让你的dedecms快10倍以上第1/2页
- 如何减少浏览器的reflow和repaint
- javascript日期处理函数,性能优化批处理
- Listview加载的性能优化是如何实现的
- JavaScript 性能优化小结
- JQuery教学之性能优化
- jQuery 性能优化手册 推荐