《Android应用性能优化》第一章 Java代码优化
来源:互联网 发布:java可视化图形界面 编辑:程序博客网 时间:2024/05/21 05:08
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. 充分考虑数据库创建,事务处理,检索查询等方式。
0 0
- 《Android应用性能优化》试读:第一章:Java代码优化
- 《Android应用性能优化》第一章 Java代码优化
- Android 应用性能优化(一)JAVA代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- 性能优化之Java(Android)代码优化
- Android性能优化之Java代码优化
- STM32 通用定时器
- HTML中的button标签的使用,和介绍
- Bitmap与Drawable、byte[]、图片资源、图片文件的转换
- 通用定时器作为输入捕获
- HDU - 1556 Color the ball (一维树状数组 + 区间修改 + 单点求值)
- 《Android应用性能优化》第一章 Java代码优化
- 二叉树与满二叉树
- STM32 IO 简介
- UIScrollView无法滚动的解决办法
- RTC 实时时钟
- Poj 3020 Antenna Placement (二分图最小路径覆盖)
- 97. Interleaving String
- swift实现单例模式
- 静态与动态两种方式来声明矩阵