原文来自博客内容
http://www.cnblogs.com/ghj1976/archive/2011/04/28/2031586.html
Android 包括一个应用程序框架、几个应用程序库和一个基于 Dalvik 虚拟机的运行时,所有这些都运行在 Linux 内核之上。
通过利用 Linux 内核的优势,Android 得到了大量操作系统服务,包括进程和内存管理、网络堆栈、驱动程序、硬件抽象层、安全性等相关的服务。
runtime
对Java开发者而言,最有关系的信息是Android
Runtime:
1、Android包括一组核心库(core libraries),他提供了 Java 编程语言的核心库中大多数可用功能。
2、每个 Android 应用程序运行在自己的进程上,有自己的 Dalvik 虚拟机实例。 Dalvik这样是为了使一个设备可以有效地运行多个虚拟机。 Dalvik VM 以被优化占用最小内存的Dalvik Executable (.dex)格式执行文件。VM 是基于寄存器的,并通过一个 Java 语言编译器的编译来运行,而这个Java编译器已经被内置的"dx"工具转成.dex 格式。
3、Dalvik MicrosoftVM 依赖 Linux 内核获得基本功能,如线程处理和低层内存管理。
Android亦包含常见移动平台的关键性能,它已拥有一个良好的堆栈,包括蓝牙、EDGE, 3G和WiFi。在UI方面,支持OpenGL ES提供3D和类似于iPhone的界面管理(surface management)。
这个平台很依赖Java和XML,这是现今开发者非常熟悉的两种技术。硬件可能怎么着都得一年后,不过SDK已经出现,而且Google为优秀的应用悬赏1000万美元。
Android进程知识的补充:
下图是标准的Android 架构图,
其中我们可以看到在“Android本地库 & Java运行环境层”中,Android 运行时中,
Dalvik是Android中的java虚拟机,可支持同时运行多个虚拟机实例;每个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例;
所有java类经过java编译器编译,然后通过SDK中的dx工具转成.dex格式交由虚拟机执行。
一、Aplications(应用层)
应用是用Java语言编写的云新在虚拟机上的程序。
二、Application Framework(应用框架层)
这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。
View System:可以用来构建应用程序,它包括列表、网格、文本框、按钮以及可嵌入的Web浏览器。
Content Providers:它可以让一个应用访问另一个应用的数据,或共享它们自己的数据。
Resource Manager:提供非代码资源的访问,如本地字符串、图形和布局文件。
Notification Manager:应用可以在状态栏中显示自定义的提示信息。
Activity Manager:用来管理应用程序生命周期并提供常用的导航退回功能。
Window Manager:管理所有的窗口程序。
Package Manager:Android系统内的程序管理。
三、Libraries、Android Runtime(系统运行库层)
当使用Android应用框架时,Android系统会通过一些C/C++库赖支持我们使用的各个组件,使其能更好地为我们服务。
Bionic系统C库:C语言标准库,系统最底层的的库,C库通过Linux系统来调用。
多媒体库(MediaFramework):Android系统多媒体库,基于PackerVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以及图片,比如MPEG4、MP3、AAC、AMR、JPG、PNG等。
SGL:2D图形引擎库。
SSL:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。
OpenGL ES 1.0:3D效果的支持。
SQLite:关系数据库。
Webkit:Web浏览器引擎。
FreeType:位图(bitmap)及矢量(vector)。
在Android操作系统中,每个Java程序都运行在Dalvik虚拟机上,其只能执行.dex的可执行文件,当Java程序通过编译后,最后还需要通过SDK中的dx工具转为成.dex格式才能正常在虚拟机上执行,Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式dex(Dalvik Exceutable)的文件。
Dalvik虚拟机有如下几个主要特征:
1.专有的dex文件格式。
2.dex的优化,dex文件的结构是紧凑的。
3.基于寄存器。
4.一个应用,一个虚拟机实例,一个进程。每一个Android应用度运行在一个Dalvik虚拟机实例中,每一个虚拟机实例都是一个独立的进程空间。
四、Linux Kernel(Linux内核层)
显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动。
键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。
Flash内存驱动(Flase Memory Driver):基于MTD的Flash驱动程序。
照相机驱动(Camera Driver):常用的基于Linux的v412(Video for Linux)的驱动。
音频驱动(Audio Driver):常用的基于ALSA的高级Linux声音体系驱动。
蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。
WiFi驱动:基于IEEE 802.11标准的驱动程序。
Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
Power Management(电源管理):比如电池电量等。
五、Android应用程序框架
android.app:提供高层的程序模型和基本的运行环境。
android.content:包含对各种设备上的数据进行访问和发布。
android.database:通过内容提供者浏览和操作数据库。
android.graphics:底层的图形库,包含画布i、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。
android.location:定位和相关服务的类。
android.media:提供一些类管理多种音频、视频的媒体接口。
android.net:提供帮助网络访问的类,超过通常的java.net.*接口。
android.os:提供了系统服务、消息传输和IPC机制。
android.opengl:提供OpenGL的工具。
android.provider:提供访问Android内容提供者的类。
android.telephony:提供与拨打电话相关的API交互。
android.view:提供基础的用户界面接口框架。
android.util:涉及工具性的方法,例如时间日期的操作。
android.webkit:默认浏览器操作接口。
android.widget:包含各种UI元素在应用程序的布局中使用。
android进程模型:
在安装Android应用程序的时候,Android会为每个程序分配一个Linux用户ID,并设置相应的权限,这样其它应用程序就不能访问此应用程序所拥有的数据和资源了。
在 Linux 中,一个用户ID 识别一个给定用户;在 Android 上,一个用户ID 识别一个应用程序。
应用程序在安装时被分配用户 ID,应用程序在设备上的存续期间内,用户ID 保持不变。
默认情况下,每个apk运行在它自己的Linux进程中。当需要执行应用程序中的代码时,Android会启动一个jvm,即一个新的进程来执行,因此不同的apk运行在相互隔离的环境中。
下图显示了:两个 Android 应用程序,各自在其自己的基本沙箱或进程上。他们是不同的Linux user ID。
开发者也可以给两个应用程序分配相同的linux用户id,这样他们就能访问对方所拥有的资源。
为了保留系统资源,拥有相同用户id的应用程序可以运行在同一个进程中,共享同一个jvm。
如下图,显示了两个 Android 应用程序,运行在同一进程上。
不同的应用程序可以运行在相同的进程中。要实现这个功能,首先必须使用相同的私钥签署这些应用程序,然后必须使用 manifest 文件给它们分配相同的 Linux 用户 ID,这通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到。
开发者也可以给两个应用程序分配相同的linux用户id,这样他们就能访问对方所拥有的资源。
为了保留系统资源,拥有相同用户id的应用程序可以运行在同一个进程中,共享同一个jvm。
如下图,显示了两个 Android 应用程序,运行在同一进程上。
不同的应用程序可以运行在相同的进程中。要实现这个功能,首先必须使用相同的私钥签署这些应用程序,然后必须使用 manifest 文件给它们分配相同的 Linux 用户 ID,这通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到。
分享到:
相关推荐
这个“个人编写Android进程管理器源代码”旨在提供一个自定义的解决方案,帮助开发者更好地理解和控制Android设备上的进程。下面我们将深入探讨Android进程管理的相关知识点,并基于这个源代码进行分析。 一、...
本篇文章将深入探讨如何利用Parcelable和Service在Android进程中传递对象数据。 首先,我们来理解什么是Parcelable。在Android中,Parcelable是比Serializable更高效的数据序列化方式,用于在内存中创建对象的二...
【Android 进程保活】应用进程拉活 ( 双进程守护保活 ) https://hanshuliang.blog.csdn.net/article/details/115604667 博客源码快照
首先,我们要了解Android进程的概念。在Android中,每个应用都运行在自己的进程中,默认情况下,只有同一应用内的组件才能互相通信。但有时,我们需要一个应用与另一个应用进行交互,这就需要用到IPC。 AIDL是...
本文将深入探讨Android进程保活的原理、方法以及实现策略。 首先,理解Android系统的进程管理机制是至关重要的。Android系统根据进程的重要性将其分为五种级别:前台进程、可见进程、服务进程、后台进程和空进程。...
本文将详细探讨Android进程的五种优先级以及系统如何进行进程回收。 1. **进程优先级** Android将进程分为五个等级,按重要性排序: - **前台进程**:当前用户正在直接交互的进程,如运行中的Activity和前台...
Android进程注入是一种技术,它允许一个应用程序在另一个应用程序的进程中运行其代码,通常是出于调试、监控或增强功能的目的。在Android系统中,由于其安全模型,这种操作需要深入理解操作系统的工作原理以及相应的...
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键机制,使得不同应用程序或同一程序的不同进程之间能够共享数据、调用服务等。本示例"android 进程间通信demo"专注于讲解如何利用...
本教程将深入讲解AIDL的使用和其在Android进程间通信中的应用。 首先,我们要理解什么是AIDL。AIDL实际上是一种接口定义语言,类似于Java中的接口,但它的目的是让不同的Android进程之间能够调用彼此的方法。当一个...
总之,Android进程管理是优化应用性能的重要一环,理解其机制并根据设备特性进行定制优化,能够提升用户体验,减少系统资源的浪费。通过持续学习和实践,开发者可以更好地驾驭这一机制,为用户提供更高效、更流畅的...
Android进程间通信(IPC)机制Binder简要介绍和学习计划
Android进程保活 Android进程保活Android进程保活·1像素且透明Activity进程App进程优先级Android进程首先你要知道Android中的进程以及它的优先级,下面来说明它进程前台进程(前台进程)可见进程(可见进程)服务...
### Android进程间通信机制(Binder)介绍 #### 1. 概述 Android系统中,Binder机制是实现进程间通信(IPC, Inter-Process Communication)的核心技术之一。它不仅为不同进程之间的对象提供了数据交换的功能,而且还...
**Android进程间通信(IPC):AIDL详解** 在Android系统中,进程间通信(IPC,Inter-Process Communication)是应用程序之间数据交换的关键技术。AIDL(Android Interface Definition Language)是Android提供的一...
然而,有时开发者或用户可能希望某些应用程序的进程能够持续运行,不受系统自动清理的影响,这就是“死而复活的Android进程永存”现象。下面我们将详细讨论这个话题。 1. **Android进程生命周期** Android中的进程...
【一图流】_02_一张图看懂 Android 进程间通信(IPC)Binder机制: 此图表述了Android系统_进程间通信(IPC)机制全部体系,其中重点放在 Android系统中 重用 的 Binder机制 上,详尽细致,希望对大家有用;
"Android进程保活Demo"提供了一个简单的实现示例,帮助开发者理解如何确保应用程序在各种条件下保持运行状态。以下是对这个话题的详细解释: 一、Android进程的概念 Android系统将应用程序分为不同的进程,每个应用...
Android进程和线程是Android应用程序运行的基础,理解这两个概念对于开发高质量的Android应用至关重要。在Android系统中,每个应用都是一个独立的Linux进程,这意味着它们在各自的沙箱环境中运行,互不影响,提高了...
在本"Android进程间通信Demo"中,我们将重点探讨两种主要的IPC方式:普通的进程间通信和通过AIDL(Android Interface Definition Language)实现的进程间对象传递。 首先,让我们来看看“16”部分,即Android进程间...