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全屏内容。

更多相关文章

  1. android R 文件生成不了
  2. Android 实现文件上传功能(upload)
  3. android利用线程池高效实现异步任务
  4. Android清单文件详解(六) ---- 节点的属性
  5. Android Uri获取资源文件(多种方式)
  6. 编译android 之后生成的 img 文件介绍
  7. android操作sdcard中的多媒体文件(一)——音乐列表的制作
  8. android 操作sdcard中的多媒体文件(一)——音乐列表的制作
  9. Android Zip文件解压缩代码

随机推荐

  1. Android 集成flutter
  2. android studio里面的svn基本使用
  3. Android 简单计算器实现
  4. Android手势翻页效果
  5. Android的富文本功能
  6. Android SmartRefreshLayout下拉刷新上拉
  7. s003android逆向安全初级篇之apk smali语
  8. android 项目中规范使用SharedPreference
  9. SwipeRefreshLayout+RecyclerView实现下
  10. HorizontalScrollView