深刻解读Linux与Android的相互关系& Android消息处理系统的原理

深刻解读Linux与Android的相互关系

你们都知道Android是基于Linux内核的 操做系统,也曾经和Linux基金会由于内核问题产生过度歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux之间的关系,后续还会讲到Android系统在Linux系统之上扩展的部分功能和驱动,但愿你们可以持续关注IT168技术频道。

虽然Android基于Linux内核,可是它与Linux之间仍是有很大的差异,好比Android在Linux内核的基础上添加了本身所特有的驱动程序。下面咱们就来分析一下它们之间究竟有什么关系?html

1、Android为何会选择Linuxjava

成熟的操做系统有不少,可是Android为何选择采用Linux内核呢?这就与Linux的一些特性有关了,好比:android

一、强大的内存管理和进程管理方案安全

二、基于权限的安全模式框架

三、支持共享库ionic

四、通过认证的驱动模型oop

五、Linux自己就是开源项目性能

更多关于上述特性的信息能够参考Linux 2.6版内核的官方文档,这便于咱们在后面的学习中更好地理解Android所特有的功能特性。接下来分析Android与Linux的关系。学习

2、Android不是Linux优化

看到这个标题你们可能会有些迷惑,前面不是一直说Android是基于Linux内核的吗,怎么如今又不是Linux了?迷惑也是正常的,请先看下面几个要点,而后咱们将对每个要点进行分析,看完后你就会以为Android不是Linux了。

由于它没有本地窗口系统,没有glibc的支持,并且并不包括一整套标准的Linux使用程序,同时加强了Linux以支持其特有的驱动。

1.它没有本地窗口系统

什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OX X的Quartz等。不一样的操做系统的窗口系统可能不同,Android并无使用(也不须要使用)Linux的X窗口系统,这是Android不是Linux的一个基本缘由。

2.它没有glibc支持

因为Android最初用于一些便携的移动设备上,因此,可能出于效率等方面的考虑,Android并无采用glibc做为C库,而是Google本身开发了一套Bionic Libc来代替glibc。

3.它并不包括一整套标准的Linux使用程序

Android并无彻底照搬Liunx系统的内核,除了修正部分Liunx的Bug以外,还增长了很多内容,好比:它基于ARM构架增长的Gold-Fish平台,以及yaffs2 FLASH文件系统等。

4.Android专有的驱动程序

除了上面这些不一样点以外,Android还对Linux设备驱动进行了加强,主要以下所示。

1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通讯(InterProcess Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备作了不少优化。源代码位于:

kernel/power/earlysuspend.c

kernel/power/consoleearlysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它能够根据须要杀死进程以释放须要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于mm/ashmem.c。

5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工做在连续的物理内存上。源代码位于drivers/misc/pmem.c。

6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各类日志。源代码位于drivers/staging/android/logger.c。

7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即便在设备睡眠时也会运行的时钟基准。源代码位于drivers/rtc/alarm.c。

8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架的。源代码位于drivers/usb/gadget/。

9)Android Ram Console 为了提供调试功能,Android容许将调试日志信息写入一个被称为RAM Console的设备里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于drivers/staging/android /timed_output.c(timed_gpio.c)。

11)Yaffs2 文件系统 Android采用Yaffs2做为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其余Flash文件系统相比,Yaffs2能使用更小的内存来保存其运行状态,所以它占用内存小。Yaffs2的垃圾回收很是简单并且快速,所以能表现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤其突出,很是适合大容量的Flash存储。

上面这些要点足以说明Android不是Linux。本书的主要内容将围绕Android的这些特有的部分展开,咱们的讲解会尽可能通俗易懂,但仍是建议你们先复习一下Linux内核的基本知识。在具体学习以前,咱们仍是先来整体浏览一下Android对Linux内核进行了哪些改动,在移植时就须要对这些改动加以调整。

深刻理解 Android消息处理系统的原理

    Android应用程序也是消息驱动的,按道理来讲也应该提供消息循环机制。实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制。

Android经过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每一个线程均可以有本身的消息队列和消息循环)。

本文深刻介绍一下Android消息处理系统原理。

Android系统中Looper负责管理线程的消息队列和消息循环,具体实现请参考Looper的源码。 能够经过Loop.myLooper()获得当前线程的Looper对象,经过Loop.getMainLooper()能够得到当前进程的主线程的Looper对象。

前面提到Android系统的消息队列和消息循环都是针对具体线程的,一个线程能够存在(固然也能够不存在)一个消息队列 和一个消息循环(Looper),特定线程的消息只能分发给本线程,不能进行跨线程,跨进程通信。可是建立的工做线程默认是没有消息循环和消息队列的,若是想让该线程具备消息队列和消息循环,须要在线程中首先调用Looper.prepare()来建立消息队列,而后调用Looper.loop()进入消息循环。以下例所示:

class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler
= new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here } };
Looper.loop();
} }

这样你的线程就具备了消息处理机制了,在Handler中进行消息处理。

Activity是一个UI线程,运行于主线程中,Android系统在启动的时候会为Activity建立一个消息队列和消息循环(Looper)。详细实现请参考ActivityThread.java文件。

Handler的做用是把消息加入特定的(Looper)消息队列中,并分发和处理该消息队列中的消息。构造Handler的时候能够指定一个Looper对象,若是不指定则利用当前线程的Looper建立。详细实现请参考Looper的源码。

Activity、Looper、Handler的关系以下图所示:

深刻理解 Android消息处理系统的原理

一个Activity中能够建立多个工做线程或者其余的组件,若是这些线程或者组件把他们的消息放入Activity的主线程消息队列,那么该消息就会在 主线程中处理了。由于主线程通常负责界面的更新操做,而且Android系统中的weget不是线程安全的,因此这种方式能够很好的实现Android界 面更新。在Android系统中这种方式有着普遍的运用。

相关文章
相关标签/搜索