1.1 Android执行代码的流程
Android开发者使用Java,不过Android平台不用Java虚拟机来执行代码,而是把应用编译成Dalvik字节码,使用Dalvik虚拟机来执行。Java代码仍然编译成Java字节码,但随后Java字节码会被dex编译器(dx, SDK工具)编译成Dalvik字节码,最终,应用只包含Dalvik字节码, 而不是Java字节码。
apk文件只是简单的zip压缩文件,可以使用常见的压缩工具查看apk文件的内容。
虚拟寄存器是指实际上非真实的硬件寄存器,也就是Dalvik虚拟机使用的寄存器。
在Android2.2和更高版本中引入了JIT(实时编译器),Dalvik JIT编译器把Dalvik字节码编译成本地代码,这可以明显加快执行速度。因为:
本地代码由CPU执行,而不必由编译器解释执行。
本地代码可以为特定架构予以优化。
1.2 从递归到迭代
选择最佳算法。
基于性能方面的考虑,在代码的关键路径上,要尽量避免内存分配。
1.3 缓存结果
比如使用SparseArray比使用HashMap效率更高。
在合适的地方使用LrcCache进行缓存。
1.4 API等级
应用中manifest文件中使用下面两个属性:
android:minSdkVersion
android:maxSdkVersion
根据属性指定对应的方法操作。例如
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES_HONEYCOMB){
sparseArray.removeAt(1);
}else{
int key = sparseArray.keyAt(1);
sparseArray.remove(key);
}
1.5 数据结构
好的算法和数据结构是实现快速应用的关键。
1. 好的算法和数据结构是实现快速应用关键。
2. 尽量使用考虑到优化的数据结构,如LruCache, SparseArray, SparseBooleanArray, SparseIntArray, Pair。
3. 使用现有的类Arrays, Collections完成一些基本操作。
4. 使用StringBuilder代替String。
1.6 响应能力
关键点:要让用户感觉到快。优化的原则是保持应用的持续响应。
处理方式:
1. 延迟创建对象。
2. 降低布局复杂度。使用RelativeLayout代替嵌套LinearLayout, 尽可能保持“扁平化布局”。尽量减少创建对象的数量,让事件处理速度加快。
3. 可以通过把操作转移到非主线程来加快响应速度。
4. 通过StrictMode分析速度缓慢原因。网络和文件操作放到子线程中完成。
1.7 SQLite
1. 充分考虑数据库创建,事务处理,检索查询等方式。