Android的性能优化
2016-02-17 21:58
387 查看
1 android性能优化的方法,有助于提高android程序的性能,方法有哪些?
2 程序设计的一些思想,有助于提高程序的可维护,可扩展性,思想有哪些?
3 2015年,google在youtube上发布android性能优化典范:性能问题的底层工作原理,如何通过工具找出性能的问题,提升性能的建议
4 做程序设计
1> 完成功能开发
2> 提高程序性能
3>代码的可维护性,可扩展性
5 关于代码的可维护性,可扩展性,可以通过合理的设计原则去完成,
设计原则,例如:
1>良好的代码风格
2>清晰的代码层级
3>代码的可扩展性
4> 合理的设计模式
6 性能优化的方法:
布局优化
绘制优化
线程优化
Bitmap优化
响应速度的优化(ANR日志分析方法)
ListView的优化
内存泄露的优化
7 手机是移动设备,所以CPU,内存不够用
内存使用多了,就oom,内存溢出
cup过多的使用,也就是大量的耗时任务,手机会卡,或程序无响应,ANR
8 性能优化的很重要的问题就是内存泄露,内存泄露不会导致程序的功能异常,但是会提高内存溢出的几率
9 内存泄露的分析工具:MAT
10 布局优化
1 思想:减少布局的层级
2 解释:层级少了,android绘制时的工作量就少了
3 如何进行布局优化?
首先删除布局中无用的控件和层级
其次有选择的使用性能较低的ViewGroup,EX:RelativeLayout
RelativeLayout vs LinearLayout
R的功能复杂,布局需要花费更多的cpu时间
FrameLayout跟L差不多
但是要尽量避免嵌套,嵌套就相当于增加层级,所以还是建议用R
11 绘制优化
绘制优化是指View的onDraw方法要避免执行大量的操作,主要体现在两个方面:
onDraw中不要创建新的局部对象,因为onDraw方法会被频繁调用,就会在一瞬间产生大量的临时对象,不仅会占用过多内存,还会频繁的gc,降低了程序的效率
onDraw中不要做耗时任务,也不能执行成千上万次的循环操作,大量的循环会十分强占cpu的时间片,会造成view的绘制过程不流畅
性能优化的建议:
1 对象:少new
2 枚举:少用,占用内存空间比int大
3 静态内部类:多用,防止内部类造成的内存泄露
4 常量:用static final修饰
5 android特有的数据结构:SparseArray,Pair,性能更好
6 内存缓存,磁盘缓存:采用
7 软引用,弱引用:适当使用
可扩展
代码的维护代价
可读性
设计原则
代码风格
代码层级
2 程序设计的一些思想,有助于提高程序的可维护,可扩展性,思想有哪些?
3 2015年,google在youtube上发布android性能优化典范:性能问题的底层工作原理,如何通过工具找出性能的问题,提升性能的建议
4 做程序设计
1> 完成功能开发
2> 提高程序性能
3>代码的可维护性,可扩展性
5 关于代码的可维护性,可扩展性,可以通过合理的设计原则去完成,
设计原则,例如:
1>良好的代码风格
2>清晰的代码层级
3>代码的可扩展性
4> 合理的设计模式
6 性能优化的方法:
布局优化
绘制优化
线程优化
Bitmap优化
响应速度的优化(ANR日志分析方法)
ListView的优化
内存泄露的优化
7 手机是移动设备,所以CPU,内存不够用
内存使用多了,就oom,内存溢出
cup过多的使用,也就是大量的耗时任务,手机会卡,或程序无响应,ANR
8 性能优化的很重要的问题就是内存泄露,内存泄露不会导致程序的功能异常,但是会提高内存溢出的几率
9 内存泄露的分析工具:MAT
10 布局优化
1 思想:减少布局的层级
2 解释:层级少了,android绘制时的工作量就少了
3 如何进行布局优化?
首先删除布局中无用的控件和层级
其次有选择的使用性能较低的ViewGroup,EX:RelativeLayout
RelativeLayout vs LinearLayout
R的功能复杂,布局需要花费更多的cpu时间
FrameLayout跟L差不多
但是要尽量避免嵌套,嵌套就相当于增加层级,所以还是建议用R
<inclide>,<merge>,<ViewStub>这些标签,1主要用于布局重用,2 一般跟 1 配合使用,2 可以降低布局的层级,3提供按需加载的功能 ,有需要时才将ViewStub中的布局加载到内存,提高程序的初始化效率
11 绘制优化
绘制优化是指View的onDraw方法要避免执行大量的操作,主要体现在两个方面:
onDraw中不要创建新的局部对象,因为onDraw方法会被频繁调用,就会在一瞬间产生大量的临时对象,不仅会占用过多内存,还会频繁的gc,降低了程序的效率
onDraw中不要做耗时任务,也不能执行成千上万次的循环操作,大量的循环会十分强占cpu的时间片,会造成view的绘制过程不流畅
性能优化的建议:
1 对象:少new
2 枚举:少用,占用内存空间比int大
3 静态内部类:多用,防止内部类造成的内存泄露
4 常量:用static final修饰
5 android特有的数据结构:SparseArray,Pair,性能更好
6 内存缓存,磁盘缓存:采用
7 软引用,弱引用:适当使用
一些术语的总结:
可维护可扩展
代码的维护代价
可读性
设计原则
代码风格
代码层级
相关文章推荐
- 问题“undefined reference to `android_log_print”的解决办法
- Android之Button点击事件处理的几种方式
- Android开发环境搭建(一)——开发环境简介
- 自定义ViewGroup —— Tags标签布局
- Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验
- Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验
- android后台任务(二):IntentService
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER003_播放mp3
- 【转】图说Android的8年演变史
- Android Support V4是什么?
- android listview多种布局 getViewTypeCount和getItemViewType
- Android 学习笔记1
- Android中关于字符串与颜色的转换问题
- [转]Android ORM系列之GreenDao最佳实践
- android顶部(toolbar)搜索框实现
- 源码浅析 - ListViewAnimations
- Android系统移植(四)
- Android 事件分发机制源码和实例解析
- Android系统移植(三)
- [ 转]Android快速开发–使用ORMLite操作数据库