一.性能优化方法
- 布局优化
- 尽可能减少层级关系主要途径如下
- 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
- sparsearray与hashmap有点类似~但是对key的要求更精确更简单
- 适当使用软引用和弱引用让系统自动回收
- 使用内存缓存和磁盘缓存
- 使用内部类的时候尽量使用静态内部类~非静态内部类使用时要初始化外部类对象会造成外部类对象的引用增加对象引用数量
二.内存泄露分析
- 参见MAT使用
三.提高代码的可维护性的看法
- 命名要规范能让人见名知意提高代码的可读性
- 不同方法变量之间空出合适的空间----即代码排版~
- 仅为非常重要的代码添加注释