Android
系统
框架和上层应用
是类
java(
不是正统的
sun java)
开发
的,实现了自己的
java
虚拟机
dalvik
,既然用
java
虚拟机和
java
开发,一般都会认为效率低下。其实不然,在基本主流的智能手机
的软件
平台
上,
android
的执行速度是最快的。
那么
android
效率为什么这么的高呢
?
特别是一个应用程序
的启动时间很短,本文主要从以下个八方面进行分析:
1
、
资源
文件
的优化读取。
我们知道
android
在
UI
开发时有个很大的好处是
xml
文件来描述
UI
,这样有个好处是只要修改
UI
不用修改代码
就可以修改界面
的布局、显示风格和字体大小等。界面定义
变得灵活方便。
xml
配置
UI
在
qtopia
运用也有但是这么强大并且也不广泛,因为
xml
文件有个不足是解析
xml
的效率很低。
Android
是怎么做的呢
?
Android
在编译
的时候就把
xml
文件进行了优化,
android
应用程序
在解析时变得非常的高效。我们看到
apk
文件解压后会有个优化过的资源文件。
2
、
安装时进行优化
dex
文件
Android
的应用程序都打包成一个
apk
文件,实际上就是一个
zip
文件。系统第一次起来或应用程序第一次安装时,系统就把
apk
文件解压了,把可执行文件
dex
优化成
odex
文件并放在
/data/dalvik-cache
目录下。优化后的
dex
文件启动速度会加快。这解释了为什么
android
系统第一次启动是比较慢,以后起来很快了。
可能有人会问:为什么不在编译时直接优化呢
?
第⑤项会回答这个问题。
3
、
制作数据库
Android
的图形应用是加载整个
sd
卡内的所有图像的,但是为什么很快呢
?
其实
android
提前把数据
做成了数据库,所以不用每次扫描整个这个
sd
卡,大大加快了启动速度。
4
、
高效的虚拟机
Android
是基于类
java
虚拟机
dalvik
,一般的
java
虚拟机是基于栈的,而
dalvik
是基于寄存器的。实事求是说我对两者的区别了解不是很深入,不过网上有专门的相关文论进行分析。我的简单理解是栈的实现方式相对容易,相关数据是在内存中的栈里,而操作寄存器里数据的速度明显快与内存里的数据处理。
5
、
充分挖掘
CPU
的性能
Android
刚出来的时候虽然支持
arm cpu
,实际上只支持
armv5te
的指令集的,因为
android
系统专门为
armv5te
进行了优化,充分利用
armv5te
的执行流水线来提高执行的效率,这也是在
500M
的三星
2440
运行
效果
不是很好,而在
200M
的
omap cpu
上运行比较流畅的原因了,所以在最新的代码中有专门针对
x86
和
armv4
的优化部分。
6
、
优化和裁剪的
libc
库
Libc
库几乎是所以库和程序的基础,但是
android
没有直接利用
libc
库,而是自己开发了一个库:
bionic
,它实现了
libc
库的绝大多数的函数并根据平台进行了优化,但是有系统很少用并且消耗资源的少数函数是不支持的。它只有几百
k
,节省了空间同时也提高了执行效率。实际上体现了
20-80
原则,抓住少数重要的适当舍弃不必要的。
7
、
充分利用
linux
系统特性
分析过
linux
内核的朋友知道,
linux fork
一个新的进程是非常高效的,利用了
COW
机制。
Android
是每个进程是个独立的虚拟机
(
听说这么设计
是为安全考虑,某个时候进程崩溃了不会影响这个系统和其他进程。
)android
里每个进程都是基于虚拟机的,并且也要加载基本的库,实际上这些都是共享。所以
android
启动一个新的程序实际上并不消耗很多的内存和
cpu
资源。
同时
android
在后台有个
empty process
运行,实际上就是运行一个虚拟机,当要启动一个应用时就直接在其上继续运行,
qtopia
也有这个机制。
Android
系统在开机流程中:启动虚拟机—》启动
system server ?
》启动
launcher
。当初分析代码时疑惑为什么不直接启动
system server?(qtopia
就是直接启动
server)
,实际上也利用了
linux
的这个特性。
这个特性说的比较简略,不过要真的把他解释清楚可能需要很大的篇幅。
8
、
高效的
paint
机制
这个特性可能跟启动关系不大,但是也是
android
高效的特性之一。界面变化时大部分实际上不是全屏内容变化的,只是局部变化,
android
会根据变化的内容只是跟新局部的内容,也提高了效率。这个也提醒我们在开发应用程序时,重载
paint
方法时尽量不要
paint
全屏内容。
分享到:
相关推荐
Android应用程序性能优化秘籍,有了它 再也不用和PM QA 撕逼啦。
Android程序猿面试秘籍,真正的面试题库,Android程序猿面试秘籍
linux系统快速启动十大秘诀.pdf
android开发秘籍完整版清晰版 第1 章 android 概述 1 1.1 android 演化史 1 1.2 android 的两面性 2 1.3 运行android 的设备 2 1.3.1 htc 系列机型 4 1.3.2 摩托罗拉系列机型 4 1.3.3 三星系列机型 4 1.3.4 ...
Linux需要重新启动是少有的。可是一旦需要,Linux启动常常是缓慢的。幸好有一些加速的办法。其中一些方法不太难。咱们瞧一瞧吧。
Linux启动更快速的十大秘Linux启动更Linux启动更快速的十大秘诀快速的十大秘诀诀
快速创建 Android 应用程序。 依赖关系 编译'com.github.yoojia:fast:1.2@aar' 笔记 - Proguard -keepclassmembers class * { @com.github.yoojia.fast.view.AutoView *; } - TableView 样式 常见的 :first="true...
Android 6开发秘籍 第5版
高效J2ME应用程序秘诀二十招.
快速掌握使用AV Foundation开发iOS和OS X应用的技术如果想开发富媒体iOS或OS X应用程序,你可以使用苹果公司推出的AV Foundation框架来实现诸多神奇功能。不过AV Foundation框架基于最前沿的语言特征,极其庞大,...
4、安装完成后配置Android SDK,将Android SDK安装目录中的tools文件夹路径添加到环境变量中,更改系统变量中的"Path"项,添 加路径: 5、安装和配置ADT,参照Android应用开发秘籍,启动Eclipse,点击"Help"菜单,按...
Android系统50大必备秘籍分享 希望能帮到大家
Tkinter 是基于 TKGUI 工具包构建的,是快速 GUI 开发的常见选择,复杂应用程序可以从该库的全部功能中获益。本书涵盖了所有 Tkinter 和 Python GUI 开发问题和解决方案。 Tkinter GUI 应用程序开发烹饪书首先概述 ...
4、安装完成后配置Android SDK,将Android SDK安装目录中的tools文件夹路径添加到环境变量中,更改系统变量中的"Path"项,添 加路径: 5、安装和配置ADT,参照Android应用开发秘籍,启动Eclipse,点击"Help"菜单,按...
4、安装完成后配置Android SDK,将Android SDK安装目录中的tools文件夹路径添加到环境变量中,更改系统变量中的"Path"项,添 加路径: 5、安装和配置ADT,参照Android应用开发秘籍,启动Eclipse,点击"Help"菜单,按...
想开发Android应用吗?从这里开始吧! 经过这么多年的发展,你可能会认为移动应用市场已经饱和了,能想到的应用都已经做出来了,但事实并非如此。仍然有许多的空白需要被填补,现在领先的一些应用体验也并不好。总结...
Android系统50大必备秘籍,欢迎参考资源
4、安装完成后配置Android SDK,将Android SDK安装目录中的tools文件夹路径添加到环境变量中,更改系统变量中的"Path"项,添加 路径: 5、安装和配置ADT,参照Android应用开发秘籍,启动Eclipse,点击"Help"菜单,按...
)书比较老了,但是对于希望在Windows下写程序的人来说是一本不错的入门经典书籍。本书不是一些秘籍、30天速成之类的教程。如果你有此需求请不要下载,这样会浪费你的时间。但是你想成为一个Windows下的程序员,希望...
全书共分9章,包括应用程序的基础生成技巧、面向对象程序设计、程序开发技巧、泛型、用户界面的设计与开发、控件的设计技巧、列表类型控件的设计技巧、人机界面的设计技巧以及工具栏、菜单及状态列等内容。...