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是基于寄存器的。实事求是说我对两者的区别了解不是很深入,不过网上有专门的相关文论进行分析。我的简单理解是栈的实现方式相对容易,相关数据是在内存中的栈里,而cpu操作寄存器里数据的速度明显快于内存里的数据处理。
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全屏内容。
- 浏览: 679006 次
- 性别:
- 来自: 上海
最新评论
-
qinshubao152:
参考:http://www.see-source.com/bl ...
关于android USB Host 串口编程 -
q328965539:
哥们 我做的数据也都是错误的啊····我怎么可以知道自己otg ...
关于android USB Host 串口编程 -
hgkmail:
好文
android中跨进程通讯的4种方式 -
cczscq:
楼主,我这里有个问题!我这里有个自己制作的font.ttf,这 ...
android字体的工作原理 -
blueice1986:
既然springMVC比struts好那么多的话那struts ...
为什么有了Struts 还要Spring MVC
相关推荐
ANR(Application Not Responding)是指应用程序无响应,当用户界面无法及时响应用户的输入事件或者系统服务请求时,Android系统将提示ANR错误。主要分为四类:InputDispatching Timeout、BroadcastQueue Timeout、...
首先需要明确的是,提供的文件内容与Android系统优化主题无关,而是关于提供PDF电子书代找服务的介绍。这与标题“Android系统优化从入门到精通_胡郁”描述的内容不相符。因此,我将仅就Android系统优化进行知识的...
Android 项目是使用 Android 操作系统和相关开发工具开发的一款移动应用程序。Android 平台提供了丰富的功能和接口,开发人员可以使用 Java 或 Kotlin 等编程语言编写 Android 应用程序。Android 项目也可以是针对...
Android系统中运行的程序包主要分framework,system/app,data/app,三个路径,开机的时候启动内核后,就会逐个启动framework里的jar框架程序,再启动system/app的开机自启程序。 如果你想把整个ROM都odex化,就必须先...
Android 优化技术详解 Android 优化技术是指通过合理的编程和设计来提高 Android 应用程序的性能、内存和用户体验的一系列技术。下面是 Android 优化技术的详细解释: UI 布局优化 Android 的 UI 界面布局的优化...
根据文档的概述,文件系统优化涵盖了多个方面,包括但不限于: 1. 文件系统的类型选择:不同的文件系统拥有不同的特性,如ext3/ext4是广泛使用在Linux系统上的文件系统,提供了良好的性能和兼容性;BTRFS(B-Tree ...
Android系统基于Linux内核,但其应用程序层主要采用Java语言编写,并通过Dalvik或ART(Android Runtime)虚拟机运行。Java源码的可读性和可维护性使得开发者能快速理解和修改代码,以实现特定功能。这款优化软件正是...
Android操作系统是Google公司开发的一款基于Linux内核的开源移动操作系统,自2007年发布以来,已经成为全球最受欢迎的智能手机和平板电脑操作系统之一。Android以其开放源代码特性,吸引了众多开发者和制造商,形成...
Android系统源代码是开发者深入了解Android系统运行机制、优化应用性能、解决技术难题的关键所在。这份源代码包含了Android系统的四层架构:应用程序层、应用程序框架层、系统库层和Linux内核层。下面将详细探讨这四...
Android WiFi Display功能优化是指在Android系统中,WiFi Display功能的优化建议,以提高该功能的性能和可维护性。本文将从架构图、代码分析和优化建议三个方面对Android WiFi Display功能进行深入分析和讨论。 一...
Content Resolver是Android系统中的一个接口,它用于与Content Provider交互,而Content Provider则是应用之间共享数据的桥梁。当我们通过Intent从Camera或Gallery选择图片时,实际上是与系统的MediaStore Content ...
《Unicore32架构下的Android系统链接加载优化》这篇文献主要探讨了在Unicore32处理器架构下,如何优化Android系统的链接加载过程,从而提高系统启动速度和整体性能。作者曹越从Android的链接加载系统入手,深入剖析...
1. **Android系统移植**:Android系统移植涉及到将Android操作系统安装到不同的硬件平台上,包括处理器架构适配(如ARM、x86)、驱动程序开发和优化、Bootloader配置等。开发者需要理解Android的HAL(硬件抽象层)和...
这包括对Android系统的电源管理机制的理解,比如如何合理安排服务和广播接收器,如何管理唤醒锁,以及如何减少传感器、网络和CPU的功耗。 综上所述,《Android应用性能优化》一书将带领读者全面深入地掌握Android...
深入学习"Android优化大师"的源码,不仅可以帮助开发者掌握优化技巧,还能增进对Android系统内部运作的理解。通过对源码的阅读和实践,我们可以学习到如何使用Android Profiler进行性能分析,如何使用Lint工具检查...
在当今智能手机市场中,Android系统和iOS系统已经形成了两大对立的阵营。尽管iOS用户可能认为Android设备存在“卡顿”的问题,但实际随着硬件水平的不断提升以及系统优化的不断深化,Android设备的流畅度已经有了...
《Android系统源代码情景分析 第3版》是深入理解Android操作系统内核与应用程序开发的一本重要参考资料。本书针对Java开发者,详细解读了Android系统的各个方面,包括系统架构、进程管理、内存管理、图形系统、网络...