(一)Android?
Andoid是一个在linux上的,多用于移动终端的操作系统,不是类似redhat的服务器OS,也不是类似Windows的标准桌面OS,只是一种手持设备的较为简单的图形OS,Android应用程序使用Java开发。Android从linux kernel开出的分支,比如我的华为手机android是4.3,使用的linux kernel是3.4。
android代码已经被linux kernel社区剔除。android由于继承了linux kernel代码,根据linux GPL规定即对开源代码的任何修改,都必须开源,所以android开源了。同时android属于ASL许可证,ASL许可证规定可以随意使用代码不用开源,所以android上的应用程序和驱动程序都似乎闭源的,这也满足了很多硬件厂商的要求。
与Liinux嵌入式开发使用系统调用和glibc接口不同的是,Android没有glibc的支持,自己使用BionicLibc库。并且,按照移动终端OS的需求提炼出了自己的一套接口,开发人员在Android接口上开发,Android接口就是我们下面提到的一系列java基础类库。
额外的一个问题:为什么android使用了linux内核:
答:回答这个问题需要先了解内核的作用,内核提供了进程管理/文件网络管理/系统安全权限管理等。内核对上层操作者是不可见的,只能针对提供出来的操作接口进行操作。所以内核对整个系统来说是基础性的,不是功能性的。
借用知乎上的话,开发一个内核不难,难在成千上万的设备为他做驱动。Apple和Windows有独立的自有硬件或者有能力说服硬件厂商为之作驱动,但是android开发之初,只能选择Linux。
(二)Android的应用组件
Android应用程序没有为应用准备一个单独的程序入口(比如说,没有main方法),而是为系统依照需求实例化提供了基本的组件。共有四种类型的组件:
Activity:一个应用程序可以有一个或多个activity,每个用户界面都是以activity为基类的子类。Activity生命周期包含active/pause/stop,android会对组件的生命周期作管理,会在系统需要内存时候自动销毁stop的Activity组件。
Service:后台服务可以在后台做一些文件处理网络处理等,将结果提供给需要的activity使用,每个服务都继承Service类。服务运行于应用进程的主线程内,耗时服务会使用新县城执行。
BroadcastRecvice:广播消息接收类,用于接收广播消息并作出处理的组件,很多广播消息源于系统代码比如时区的改变,电池电量低,拍摄了照片或者改变了语言选项。
Intent:消息组件,用于各个组件之间的消息传递。
Android的线程是以标准的Java Thread对象创建的。
Android有一个轻量级的远端过程调用(RPC)机制,既在本地调用一个方法,在远程处理然后将结果返回。
(三)Android对Linux kernel的增强
android对kernel的增强主要体现在对Linux kernel驱动的增强。Android将设备驱动提到Userspace中,不继承在内核中。
1)OpenBinder框架的驱动,用于提供Android平台的进程间通信IPC功能,代码在drivers/staging/android/binder.c
2)Android电源管理,一个基于标准Linux电源管理系统的轻量级Android电源管理系统。
3)低内存管理器:比OOM机制更加灵活,可以根据需要杀死进程以释放需要的内存。drivers/staging/android/lowmemkiller.c
4)匿名共享内存(Ashmem)为进程提供大块的共享内存,同时也提供管理和回收这个内存的机制。
5)Physical MEM:向用户提供连续的物理内存空间。
6)Android Logger:轻量级的日志设备
7)Android Alarm:定时器的android定制/
8)Yaffs2文件系统。