高性能编程

2018-07-16  本文已影响0人  404b244d4452

包含:

Android内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占用分析

两条基本的原则:

(1)不要做不必要的事;(2)不要分配不必要的内存。

高效的代码由两点的来决定:

1.高效的数据结构 ;2高效的执行算法。

延迟初始化:

1、减少全局变量:只要声明一个全局变量就会在类加载或者初始化的时候执行一条指令
2、对于开销大的静态模块或者全局非静态模块,可以重构到另外一个类里,达到延迟初始化的作用。
3、声明全局静态变量,一定要加final声明:静态常量,编译期常量,编译class时就确定值;存方法区中静态常量池;在编译阶段存入调用类的常量池中
4、延迟findviewbyid操作
5、ScheduledThreadPoolExecutor延迟耗时操作、或者handler的postdelay等方法

类、方法、变量:

1、局部变量代替全局变量
2、避免在内部调用Getters/Setters方法
3、方法变为静态:调用速度提升15%-20%
4、避免使用枚举:增加文件体积;
5、if、for等遍历的条件优化

数据结构选择:

1、ArrayList和LinkedList的选择:
ArrayList根据index取值更快,LinkedList更占内存、随机插入删除更快速、扩容效率更高。一般推荐ArrayList。
2、ArrayList、HashMap、LinkedHashMap、HashSet的选择:
hash系列数据结构查询速度更优,ArrayList存储有序元素,HashMap为键值对数据结构,LinkedHashMap可以记住加入次序的hashMap,HashSet不允许重复元素。
3、HashMap、WeakHashMap选择:
WeakHashMap中元素可在适当时候被系统垃圾回收器自动回收,所以适合在内存紧张型中使用。
4、Collections.synchronizedMap和ConcurrentHashMap的选择:
ConcurrentHashMap为细分锁,锁粒度更小,内部有reentrantlock实现,并发性能更优。Collections.synchronizedMap为对象锁,自己添加函数进行锁控制更方便。
5、Android也提供了一些性能更优的数据类型,如SparseArray、SparseBooleanArray、SparseIntArray、ArrayMap替代HashMap。
Sparse系列的数据结构是为key为int情况的特殊处理,采用二分查找及简单的数组存储,加上不需要泛型转换的开销,相对Map来说性能更优。

对象生成

1、避免创建对象:StringBuffer string
2、基本数据类型来代替封装数据类型 int integer
3、增强型for循环,arraylist iterator对象

举例:
https://blog.csdn.net/litton_van/article/details/21702299
https://blog.csdn.net/litton_van/article/details/21872677

基本规范:
https://blog.csdn.net/litton_van/article/details/21956859

上一篇下一篇

猜你喜欢

热点阅读