Android应用程序快速启动的8大秘技

移动开发 Android
在基本主流的智能手机的软件平台上,Android的执行速度是最快的。本文将向大家介绍Android应用开发快速启动的8大秘技,从八方面进行分析,告诉大家Android效率为什么这么的高!

51CTO编者按:我们给大家介绍过51CTO的独家专题:Android开发应用详解。本文将向大家介绍Android应用开发快速启动的8大秘技,告诉大家Android效率为什么这么的高!

 Android系统框架和上层应用是类Java(不是正统的sun Java)开发的,实现了自己的Java虚拟机Dalvik,既然用Java虚拟机和Java开发,一般都会认为效率低下。其实不然,在基本主流的智能手机的软件平台上,Android的执行速度是最快的。 

那么Android效率为什么这么的高呢?特别是一个应用程序的启动时间很短,本文主要从以下八个方面进行分析: 

资源文件的优化读取

我们知道Android在UI开发时有个很大的好处是xml文件来描述UI,这样有个好处是只要修改UI不用修改代码就可以修改界面的布局、显示风格和字体大小等。界面定义变得灵活方便。xml配置UI在qtopia运用也有但是这么强大并且也不广泛,因为xml文件有个不足是解析xml的效率很低。 

Android是怎么做的呢? 

Android在编译的时候就把xml文件进行了优化,Android应用程序在解析时变得非常的高效。我们看到APK文件解压后会有个优化过的资源文件。 

安装时进行优化dex文件 

Android的应用程序都打包成一个APK文件,实际上就是一个zip文件。系统第一次起来或应用程序第一次安装时,系统就把APK文件解压了,把可执行文件dex优化成odex文件并放在/data/Dalvik-cache目录下。优化后的dex文件启动速度会加快。这解释了为什么 Android系统第一次启动是比较慢,以后起来很快了。 

可能有人会问:为什么不在编译时直接优化呢?第⑤项会回答这个问题。 

制作数据库 

Android的图形应用是加载整个sd卡内的所有图像的,但是为什么很快呢?其实Android提前把数据做成了数据库,所以不用每次扫描整个这个sd卡,大大加快了启动速度。 

高效的虚拟机 

Android是基于类Java虚拟机Dalvik,一般的Java虚拟机是基于栈的,而Dalvik是基于寄存器的。实事求是说我对两者的区别了解不是很深入,不过网上有专门的相关文论进行分析。我的简单理解是栈的实现方式相对容易,相关数据是在内存中的栈里,而操作寄存器里数据的速度明显快与内存里的数据处理。 

充分挖掘CPU的性能 

Android刚出来的时候虽然支持arm cpu,实际上只支持armv5te的指令集的,因为Android系统专门为armv5te 进行了优化,充分利用armv5te的执行流水线来提高执行的效率,这也是在500M的三星2440运行效果不是很好,而在200M的omap cpu上运行比较流畅的原因了,所以在最新的代码中有专门针对x86和armv4的优化部分。 

优化和裁剪的libc库 

Libc库几乎是所以库和程序的基础,但是Android没有直接利用libc库,而是自己开发了一个库:bionic,它实现了libc库的绝大多数的函数并根据平台进行了优化,但是有系统很少用并且消耗资源的少数函数是不支持的。它只有几百k,节省了空间同时也提高了执行效率。实际上体现了 20-80原则,抓住少数重要的适当舍弃不必要的。 

充分利用linux系统特性 

分析过linux内核的朋友知道,linux fork一个新的进程是非常高效的,利用了COW机制。Android是每个进程是个独立的虚拟机(听说这么设计是为安全考虑,某个时候进程崩溃了不会影响这个系统和其他进程。)Android里每个进程都是基于虚拟机的,并且也要加载基本的库,实际上这些都是共享。所以Android启动一个新的程序实际上并不消耗很多的内存和cpu资源。 

同时Android在后台有个empty process运行,实际上就是运行一个虚拟机,当要启动一个应用时就直接在其上继续运行,qtopia也有这个机制。 

Android系统在开机流程中:启动虚拟机—》启动system server ?》启动launcher。当初分析代码时疑惑为什么不直接启动system server?(qtopia就是直接启动server),实际上也利用了linux的这个特性。 

这个特性说的比较简略,不过要真的把他解释清楚可能需要很大的篇幅。 

高效的paint机制 

这个特性可能跟启动关系不大,但是也是Android高效的特性之一。界面变化时大部分实际上不是全屏内容变化的,只是局部变化,Android 会根据变化的内容只是跟新局部的内容,也提高了效率。这个也提醒我们在开发应用程序时,重载paint方法时尽量不要paint全屏内容。 

Phone Club——51CTO移动开发线下技术沙龙

活动日期:1月15日
本期主题:Android应用开发技术进阶
地点:北京市海淀区中关村南大街30号东联艺术工社
演讲讲师:范怀宇(网易)

【编辑推荐】

  1. 多图详解Android 2.3 SDK安装教程
  2. Android 2.3 SDK开发文档同步更新 附下载
  3. Android平台SQLite快速入门实践
  4. Android 2.3六大革新 剑锋直指iOS 4.2
  5. Android 2.3正式发布 11大特性全新改进

 

责任编辑:佚名 来源: eoeandroid
相关推荐

2014-05-27 15:04:15

AndroidActivitysingleTask

2009-11-18 09:25:02

linux应用程序

2022-08-03 08:21:16

FindexLinux应用程序

2013-01-21 13:39:06

IBMdW

2020-09-04 14:56:23

应用程序疫情

2012-12-25 09:52:22

Windows 8

2014-06-20 11:05:56

Android应用程序进程启动

2014-06-20 11:09:35

Android应用程序进程启动

2014-06-19 14:25:04

Android应用程序进程启动

2014-06-20 11:24:34

Android应用程序进程启动

2014-06-19 14:30:28

Android应用程序进程启动

2014-06-19 14:54:11

Android应用程序进程启动

2014-06-20 11:20:37

Android应用程序进程启动

2014-06-19 14:59:40

Android应用程序进程启动

2010-12-30 10:10:52

2010年十大应用程序Android

2021-11-24 09:00:00

云计算开发应用

2010-08-10 15:26:38

Flex应用程序

2022-09-27 15:16:42

开发Android应用程序

2010-08-23 13:55:25

Android

2020-08-03 10:20:03

应用程序锁数据安全Android
点赞
收藏

51CTO技术栈公众号