`
qiaoweishu
  • 浏览: 66207 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android应用程序的快速启动是怎样炼成的?(转)

阅读更多
    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是个优秀、复杂、庞大的系统,还有很多内容在性能方面有独特的设计,如overlay、双framebuffer等机制在这里就不一一列出,还有部分由于本人能力不足还没有发现,希望大家交流讨论,不对的地方请指正.

2010_11_12_16_14


http://blog.chinaunix.net/u1/47682/showart_1871765.html
分享到:
评论

相关推荐

    android应用程序开机启动

    Android应用程序可以实现开机时启动相关应用 如service等 Android系统在开机启动时会发出一个系统广播"android intent action BOOT COMPLETED" 在接收到这个广播就可以实现开机自启动功能 下面就是一个...

    android应用程序开发

    在本文中,我们将深入探讨如何进行Android应用程序开发,特别是针对手机通信录的实现。这个项目旨在创建一个功能齐全的通信录应用,用户可以添加、删除、编辑联系人,查看联系人列表,以及直接拨打电话和发送短信给...

    Android应用程序启动白屏黑屏优化

    ### Android应用程序启动白屏黑屏优化 #### 一、白屏黑屏现象产生的原因 在Android应用程序中,启动过程中的白屏或黑屏现象是非常常见的一个问题。这种现象通常发生在应用程序首次启动时,用户会看到一个短暂的...

    Android应用程序开发(第三版)课件源程序

    《Android应用程序开发(第三版)》是由王向辉、张国印、沈洁三位专家编著的教材,这本书深入浅出地介绍了Android平台上的应用开发技术。课件源程序是学习此书的重要辅助资料,提供了丰富的实例和练习,帮助读者更好...

    android应用开机自启动

    在Android应用开发中,"开机自启动"是一个常见的需求,特别是在需要后台服务持续运行或者希望应用程序在用户开机后立即可用的情况下。本知识点主要讲解如何利用Android的广播接收器(BroadcastReceiver)来实现在...

    Android 应用自启动

    在Android系统中,应用自启动是指应用程序在设备启动完成后自动运行的一种机制。这对于某些需要后台服务持续运行或者希望在用户开机后立即提供服务的应用来说是非常重要的。本篇将详细讲解如何实现Android应用的自...

    Lazarus开发Android应用程序指南2017版

    Lazarus开发Android应用程序的过程,从环境配置到应用的编译、生成APK文件,再到测试安装,整体操作简洁明了,适合希望快速开始Android应用开发的Pascal语言开发者。这种跨平台的开发方式有助于开发者利用已有的...

    Android应用程序进程启动过程的源代码分析.pdf

    Android 应用程序框架层创建的应用程序进程天然支持 Binder 进程间通信机制,这个特点应该怎么样理解呢?在学习 Android 系统的 Binder 进程间通信机制时,我们知道它具有四个组件,分别是驱动程序、守护进程、...

    Android应用程序启动时背景画面的切换

    下面我们将深入探讨如何实现Android应用程序启动时背景画面的切换。 首先,理解Android的主题(Theme)和样式(Style)是至关重要的。主题是全局的应用外观,可以影响整个应用程序的视觉效果,而样式则更专注于单个...

    android桌面应用程序

    4. 应用程序入口管理:Android 桌面应用程序需要管理应用程序的入口,包括自定义桌面启动、应用程序的安装、卸载等操作。 Android 桌面应用程序的开发需要了解以下知识点: 1. AndroidManifest.xml 文件:...

    浅谈android性能优化之启动过程(冷启动和热启动)

    Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 Android 应用程序的启动方式可以分为两种:冷启动和热启动。 1. 冷启动:当启动应用程序时,后台没有该应用程序的进程,这时系统会重新创建...

    Android应用程序开发 代码与PPT

    【Android应用程序开发】是IT领域中的一个重要分支,主要关注如何在Android操作系统上构建和设计交互式的移动应用。Android系统基于Linux内核,由Google主导并开放源码,为开发者提供了丰富的API和工具来创建功能...

    获取Android所有应用程序列表,点击某一项时可启动相应应用

    在Android开发中,获取系统所有应用程序列表并实现点击启动应用是一项常见的需求,这通常涉及到对Android系统的应用管理和Intent机制的理解。下面将详细讲解这个过程。 首先,我们需要理解Android权限。在...

    AndroidStudio实战快速高效地构建Android应用 AndroidStudio 高清完整带目录书签 PDF AndroidStudio实战

    Android Studio作为Google官方推荐的Android应用程序开发集成开发环境(IDE),其功能强大且不断更新,是每一个Android开发者必备的工具。 本书涵盖了从Android Studio的基础操作到高级特性的全面内容,包括但不...

    Android 开机自启动应用

    在Android系统中,开机自启动应用是指当设备完成启动过程后,系统会自动运行的一类应用程序。这些应用通常会在用户无须手动干预的情况下执行特定任务,例如同步数据、推送通知或者进行后台服务的初始化。"BOOT_...

    Android应用程序开发

    在这个平台上,开发者可以构建具有图形用户界面(GUI)的Android应用程序,而无需深入理解底层的编程语言。以下是对【快速找人游戏】这个特定应用程序开发的详细分析: 1. **界面设置**: - 应用包含两个主要界面...

    Android应用程序开发源代码

    在Android应用程序开发中,源代码是开发者的心血结晶,它揭示了应用的内部工作机制和逻辑。这份"Android应用程序开发源代码"的压缩包文件显然包含了完整的Android应用开发流程中的所有关键部分,对于初学者和有经验...

    android应用程序小例子

    在Android应用程序开发中,我们经常会遇到各种各样的小例子,这些例子可以帮助开发者更好地理解和掌握Android SDK中的各种功能和API。本篇文章将详细探讨"android应用程序小例子"这一主题,涵盖从基础概念到实际应用...

    Android 应用程序框架

    Android应用程序框架是构建Android应用的核心组成部分,它为开发者提供了丰富的工具和组件,使得开发者能够高效地开发出功能丰富、用户体验良好的移动应用。在Android中,MVC(Model-View-Controller)设计模式是一...

Global site tag (gtag.js) - Google Analytics