1. 要想优化Java代码,则首先分析Android平台是如何执行代码的。
Dalvik: Android平台不用Java虚拟机(VM)来执行代码,而是把应用编译成Dalvik字节码,使用Dalvik虚拟机来执行。Java代码仍然编译成Java字节码,但随后Java字节码会被dex编译器(sdk中的工具:dx) 编译成Dalvik字节码。最终应用只包括Dalvik字节码。
JVM: 栈式虚拟机,简单形容就是相当于函数调用。
Dalvik:寄存器式虚拟机,相当于程序中的宏定义。
Dalvik字节码在执行之前就会被编译成直接执行的代码,尽可能用立即数进行运算。程序执行时会将立即数通过寄存器进行运算,不再使用频繁的栈进行存储操作,此时得到的代码大小,执行性能都会提升。
JIT: Android在2.2中引入了实时(JIT)编译器。Dalvik JIT编译器把Dalvik字节码编译成本地代码,可以明显加快执行速度。因为:
a. 本地代码执行由CPU执行,而不必由虚拟机执行。
b. 本地代码可以为特定架构予以优化。

2. 算法优化:
递归->迭代
算法复杂度降低


3. 合理使用数据类型
long: 64位,int: 32位, short: 16位


4. 缓存结果
没有必要每次进行的I/O操作,或者计算,缓存数据供其频繁使用。


5. 使用Android定义的数据类型
例如android.util包下的类:SparseArray(int+object),SparseBooleanArray(int+boolean),SparseIntArray(int+int),SparseLongArray(int+long),LongSparseArray(long+object),
优点:与HashMap(object+object)相比,以上类键值或者值使用的均为基本数据类型,而HashMap使用的object(Integer,Boolean,Long)。因此使用HashMap时会创建很多不必要的对象,而使用android提供的优化类则可避免,效率更高。
缺点:需要依赖Android环境,在非Android环境无法使用相同代码。
ArrayMap、ArraySet: ArrayMap在内存使用上较HashMap更有优势。

6. 延迟加载/响应
应用可以延迟创建对象,直到需要的时候才创建,
ViewStub,
StrictMode进行不良行为的监测。


7. LruCache的使用

8. SQL:
sql语句优化:例如使用”+”连接字符串,使用StringBuilder对象,或者调用String.format可以提供性能。
事务:每个插入操作都会自动创建一个事务。事务有两个特性(原子提交,性能更好)
查询:只查询读取需要的数据才是上上之选。如果只需要一定数量的行,指定调用查询的限制参数,则可以进一步减少数据库的访问时间。