`
1927105
  • 浏览: 150446 次
  • 性别: 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 开发秘籍

    Android应用的每个组件都有其自己的生命周期,包括创建、启动、暂停、停止和销毁等状态。正确处理生命周期事件可以避免内存泄漏和其他运行时错误。 ### 8. 多线程与异步编程 由于Android主线程负责渲染UI,因此...

    android开发秘籍源码

    这份源码包可能是书籍配套的学习资源,通过实际操作和研究源码,读者可以更深入地理解Android应用程序的工作原理。 在Android开发中,有几个关键的知识点是必不可少的: 1. **环境搭建**:首先,开发者需要安装...

    使用安卓(Android)系统50大必备秘籍.doc

    6. **社交媒体集成**:Android支持直接与Facebook、Twitter等社交媒体平台集成,用户可以方便地分享照片、状态更新,接收通知,而无需频繁打开单独的应用程序。 7. **系统设置调整**:若Android系统没有提供所需的...

    android开发秘籍

    《Android开发秘籍》是专为想要深入理解并掌握Android应用开发技术的开发者精心准备的一份宝典。这本书涵盖了从Android开发环境搭建、基础概念理解到高级特性运用的方方面面,旨在帮助开发者提升技能,实现创新应用...

    android秘籍

    1. **Android体系结构**:了解Android系统的分层架构,包括Linux内核、硬件抽象层、系统库、应用框架以及应用程序,是每个Android开发者的基础。 2. **Activity生命周期**:深入理解Activity的各个状态和转换,如...

    appium秘籍(实际操作,带源码)

    Appium秘籍是一本专注于Appium自动化测试的实用操作指南,它详细地介绍了Appium框架的基础知识、环境配置方法以及源码实例的编写,旨在帮助读者快速掌握Appium自动化测试的实际操作技能。 ### 知识点一:Appium基础...

    SDK安装秘籍

    在Android开发领域,SDK(Software Development Kit)是必不可少的工具,它包含了开发、调试和运行Android应用程序所需要的所有组件。本文将详细介绍如何安装Android SDK,并将其与Eclipse集成,以便进行高效的开发...

    三星刷机秘诀

    三星S8500,最初搭载的是三星自家的Bada操作系统,这是一个专为触摸屏设备设计的平台,提供了Flash支持、丰富的应用程序生态以及对社交网络服务(SNS)的集成。然而,随着Android OS和iPhone OS的崛起,三星逐步将其...

    背景散焦 v1.2.6

    背景散焦应用程序可透过建立一个模糊背景的方式来模拟浅景深。 它可以利用不同的对焦设定拍摄两张相片。您可以将这两张相片合成在一起,以建立一张具有清晰对焦的物件和漂亮的模糊背景的新相片。 背景散焦拍照的...

Global site tag (gtag.js) - Google Analytics