Android 性能优化
2015-11-09 16:01
381 查看
一.性能优化方法
布局优化
尽可能减少层级关系主要途径如下
linearlayout 和framelayout 要比relativelayout性能要优越
使用include/merge/viewstub标签
绘制优化
这里是指view在ondraw方法中画出图形,由于ondraw可能频繁调用所以不要在其中创建新的局部变量,也不要执行成千上万的循环操作,再次谷歌官方给出的典范中的标准是要求 view绘制的帧率保持在60fps即1000/60 = 16ms 虽然程序很难保证这个时间但是尽量降低onDraw方法的复杂度总是切实有效的.
内存泄露的优化
静态变量如context导致activity不能及时被回收
单例模式中要求传入了context为activity实际上也是延长了activity的生命周期导致activity不能正常被回收(单例的实例对象生命周期和application一样长)
长时间的属性动画的使用.当界面消失或者要被回收的时候动画并没有执行完那么view不会被回收,同时view持有activity实例对象因此也会造成oom
响应速度优化避免anr
安卓规定activity在5秒内未响应触摸或者键盘时间broadcastreceiver在十秒内处理完操作,主线程做耗时操作...总之最终出现了anr
出现anr以后特别是出现anr又没有捕获出现anr的原因的情况下可以到安卓手机目录中的/data/anr/traces.txt文件看安卓系统输出的anr日志来分析anr的原因从而来解决anr
listview优化和bitmap优化
listview 优化不在熬述但是可以举一反三,优化不仅限于listview ----->gridview更甚至是adapterview;
bitmap也不再熬述.
线程优化 线程优化的思想是采用线程池,避免出现大量的Thread对象.Executors
其他的一些建议
尽量少创建对象
枚举占用的内存空间要比整型大固要尽量减少对枚举的使用
常量使用static final 来修饰
使用安卓特有的数据结构如SparseArray 和Pair
sparsearray与hashmap有点类似~但是对key的要求更精确更简单
竟然才知道android里有Pair这个数据结构。使用起来真是太方便了,与ArrayList配合使用,完美的解决了HashMap输出时顺序错乱的问题。补上代码说白了就是键值对儿 ArrayList<Pair<F,S>> list
适当使用软引用和弱引用让系统自动回收
使用内存缓存和磁盘缓存
使用内部类的时候尽量使用静态内部类~非静态内部类使用时要初始化外部类对象会造成外部类对象的引用增加对象引用数量
二.内存泄露分析
参见MAT使用
三.提高代码的可维护性的看法
命名要规范能让人见名知意提高代码的可读性
不同方法变量之间空出合适的空间----即代码排版~
仅为非常重要的代码添加注释
布局优化
尽可能减少层级关系主要途径如下
linearlayout 和framelayout 要比relativelayout性能要优越
使用include/merge/viewstub标签
绘制优化
这里是指view在ondraw方法中画出图形,由于ondraw可能频繁调用所以不要在其中创建新的局部变量,也不要执行成千上万的循环操作,再次谷歌官方给出的典范中的标准是要求 view绘制的帧率保持在60fps即1000/60 = 16ms 虽然程序很难保证这个时间但是尽量降低onDraw方法的复杂度总是切实有效的.
内存泄露的优化
静态变量如context导致activity不能及时被回收
单例模式中要求传入了context为activity实际上也是延长了activity的生命周期导致activity不能正常被回收(单例的实例对象生命周期和application一样长)
长时间的属性动画的使用.当界面消失或者要被回收的时候动画并没有执行完那么view不会被回收,同时view持有activity实例对象因此也会造成oom
响应速度优化避免anr
安卓规定activity在5秒内未响应触摸或者键盘时间broadcastreceiver在十秒内处理完操作,主线程做耗时操作...总之最终出现了anr
出现anr以后特别是出现anr又没有捕获出现anr的原因的情况下可以到安卓手机目录中的/data/anr/traces.txt文件看安卓系统输出的anr日志来分析anr的原因从而来解决anr
listview优化和bitmap优化
listview 优化不在熬述但是可以举一反三,优化不仅限于listview ----->gridview更甚至是adapterview;
bitmap也不再熬述.
线程优化 线程优化的思想是采用线程池,避免出现大量的Thread对象.Executors
其他的一些建议
尽量少创建对象
枚举占用的内存空间要比整型大固要尽量减少对枚举的使用
常量使用static final 来修饰
使用安卓特有的数据结构如SparseArray 和Pair
sparsearray与hashmap有点类似~但是对key的要求更精确更简单
竟然才知道android里有Pair这个数据结构。使用起来真是太方便了,与ArrayList配合使用,完美的解决了HashMap输出时顺序错乱的问题。补上代码说白了就是键值对儿 ArrayList<Pair<F,S>> list
适当使用软引用和弱引用让系统自动回收
使用内存缓存和磁盘缓存
使用内部类的时候尽量使用静态内部类~非静态内部类使用时要初始化外部类对象会造成外部类对象的引用增加对象引用数量
二.内存泄露分析
参见MAT使用
三.提高代码的可维护性的看法
命名要规范能让人见名知意提高代码的可读性
不同方法变量之间空出合适的空间----即代码排版~
仅为非常重要的代码添加注释
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories