职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 617|回复: 7

Android 应用程序快速启动的秘诀

[复制链接]
hxy 发表于 2011-6-14 13:51 | 显示全部楼层 |阅读模式
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全屏内容。


转载:http://www.eoeandroid.com/thread-28579-1-1.html

醉倚西风 发表于 2011-6-14 13:51 | 显示全部楼层
为啥我觉得还是很慢啊,特别是那个模拟器,很多时候速度被超高频率的CPU和超大的内存掩盖了,一样的配置Android不一定是最快的
最新的Android2.3不是曾有谣言标配1GHz的CPU吗

找不到我 发表于 2011-6-14 13:51 | 显示全部楼层
vvvpig 写道
为啥我觉得还是很慢啊,特别是那个模拟器,很多时候速度被超高频率的CPU和超大的内存掩盖了,一样的配置Android不一定是最快的
最新的Android2.3不是曾有谣言标配1GHz的CPU吗

真机和模拟器不一样的,不要说模拟器就是电脑的CPU和内存这么简单,模拟器在一定方面没有真机运行好。真要说android速度慢,就直接说哪款手机好了,别说模拟器。

gz-vps 发表于 2011-6-14 13:51 | 显示全部楼层
模拟器绝对不能跟真机比,昨天俺的小三刷了个2.2的ROM,速度真叫一个快啊,用的灰常爽。

钰云 发表于 2011-6-14 13:51 | 显示全部楼层
模拟器是很慢的,而且有的应用在模拟器上报内存溢出或者没有响应,真机上却能跑起来

jinchang 发表于 2011-6-14 13:52 | 显示全部楼层
w11h22j33 写道
模拟器是很慢的,而且有的应用在模拟器上报内存溢出或者没有响应,真机上却能跑起来

这个确实深有感触

月上萧萧 发表于 2011-6-14 13:52 | 显示全部楼层
还没接触过android的手机呢,什么时候搞个来玩玩

话说我当年 发表于 2011-6-14 13:52 | 显示全部楼层
w11h22j33 写道
模拟器是很慢的,而且有的应用在模拟器上报内存溢出或者没有响应,真机上却能跑起来

这个一定程度上和模拟器的ram大小有关系2.2默认是96M 你设置一个大一点的数据就不会了 我都设成256M


您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-26 06:47 , Processed in 0.131467 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表