当前位置:文档之家› Android程序设计-体系

Android程序设计-体系


25
Android进程(7)

进程间通讯
使用远程过程调用(remote
procedure call,RPC)提供
的进程间通信(IPC)机制 被activity或其他应用程序组件调用的方法将(在其他进程 中)被远程执行,而所有的结果将被返回给调用者 要求把方法调用及其数据分解到操作系统可以理解的程度 ,并将其从本地的进程和地址空间传输至远程的进程和地 址空间,然后在远程进程中重新组装并执行这个调用。执 行后的返回值将被反向传输回来

系统初始化和编程接口和标准的Linux 系统是有所不同的

Android的操作系统核心服务

可以看做是硬件层和系统(软件)上层的抽象层 安全性,内存管理,进程管理, 网络协议栈,电源管理和驱动
15
Linux内核(2)

显示驱动(Display Driver)

基于Linux的帧缓冲(Frame Buffer)驱动 基于Linux的Video for Linux驱动
享进程

进程的终止
当内存不足或活动进程需要内存时,Android系统会根据内
存使用情况终止其他进程 被终止进程会在需要时重新启动
21
Android进程(3)

Android进程的生命周期

Android系统尽可能维持进程在内存中的存在 移动智能终端的内存受限,在必要时系统会终止旧进程来提供内存空 间 根据进程的重要性来选择哪些进程会被先终止 重要性小的先被终止 前台进程 可见进程 服务进程 后台进程 空进程
Activity栈 视图(Views)用来创建程序的用户界面,包括列表、网 格、文本框等 通知管理器(Notification Manager )用来在状态栏显示应 用程序给用户的通知 内容管理器(Content Providers)使得应用程序之间可以 进行数据共享 资源管理器(Resource Manager)提供对字符串和图像 等非代码资源的访问


Android进程



用户进程的创建


称为main主线程

如进程已存在,则组件运行在已有进程或线程中;或者创建额外的线 程中;或者指定组件运行在其他进程中
20
Android进程(2)

Android进程的控制
在manifest文件中来设置组件所在的进程 组件可以运行在自己所在程序的进程中或者与某些组件共
每个Android程序都有自己的进程,拥有一个独立的Dalvik
虚拟机实例 Dalvik虚拟机被设计成为一个设备,可以高效的同时运行 多个虚拟系统 Android程序通过编译后还需要通过dx工具转换为.dex文件 Dalvik虚拟机执行.dex文件
13
运行时(Run-time)(3)

Binder IPC驱动

16
Linux内核(3)

USB驱动(USB Driver)

为移动智能终端的USB接口提供驱动 作为输入设备的键盘驱动
键盘驱动(KeyBoard Driver)

WiFi驱动

基于IEEE 802.11标准的驱动程序
基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音 体系驱动 电池电量等

不是每个组件的实例都拥有单独的线程 UI线程中实例化同一个进程中的所有组件 UI线程分发对每个组件的系统调用 对系统回调进行响应的方法总是运行在UI线程

Android UI线程的要点


不要让UI线程做每一件事情 UI线程的阻塞超过一定时间(大约5s),会引起ANR“应用程序没有 响应”对话框 单线程模式下不要阻塞UI线程,也不要在UI线程之外访问UI组件包

媒体库

基于Packet Video OpenCore,第三方库 支持多种常用音视频编解码

Mpeg4,H.264,MP3等 JPG,PNG等

支持静态图像文件


Surface Manager

管理显示子系统 为多个应用程序提供2D和3D图层无缝融合 Web浏览器引擎 用来支持Android浏览器和可嵌入的Web视图

Android提供了执行IPC事务所需的全部代码
需要关注定义和实现RPC编程接口上即可
26
Android线程

Android UI线程

应用程序启动时,系统为之创建“main”主线程,有时也称为UI线程

负责将事件分发给相应用户界面的widget 负责应用程序与Android UI组件包之间的交互

LibWebCore

10
库(Libraries)(3)

SGL

2D图形引擎的核心库 轻量级关系数据库引擎 所有程序可用 用来支持位图和矢量字体渲染 用来支持安全套接字层(SSL)加密协议的安全Internet通信 OpenGL的嵌入式版本OpenGL ES 可使用硬件3D加速或者软件3D加速
onStart()或
onDestory()方法的Service 进程拥有一个正在执行onReceive()方法的 BroadcastReceiver

前台进程通常不多
当内存太小以至于不能容纳所有的可能前台进程时,一些
前台进程就会被终止
23
Android进程(5)

可见进程

不拥有运行于前台的组件,包括 拥有不在前台但可见的activity
SQLite



FreeType

SSL

3D Libraries

11
运行时(Run-time)

Android Run-Time包括两个部分

核心库 Dalvik虚拟机 提供JAVA 编程语言核心库的大多数功能 Google为Android设计的Java虚拟机

核心库


Dalvik虚拟机
4
应用程序层

Android应用程序层集成了核心应用程序,包括
email客户端 SMS短消息程序 Google日历 Google地图 浏览器 联系人管理程序 上述程序在Android系统发布时作为核心程序打包发布

Android应用程序由Java语言编写
5
应用程序框架层

Android进程的重要性等级划分



22
Android进程(4)

前台进程
正在执行的程序的进程,包括 进程的一个activity正在与用户交互 进程拥有一个绑定在正在与用户交互的activity上的service 进程拥有一个前台运行的Service 进程拥有一个正在执行生命周期中onCreate(),
音频驱动(Audio Driver)


Power Management(电源管理)

17
Android进程与线程
进程和线程

进程

具有独立功能的程序在操作系统中的运行活动 资源分配和调度的独立单位 进程中的独立实体 CPU进行调度的基本单位 不拥有系统资源,拥有运行使用资源 一对一 一对多 多对多
嵌入式系统开发与设计
Android体系结构和基本组件
武汉科技大学计算机学院 2013年8月
Android体系结构
Android系统架构
3
Android分层结构
Android系统使用了软件栈(Software Stack)来构 建Android分层结构 从上到下依次为

应用程序层 应用程序框架层 核心类库 Linux内核

针对.dex的优化


基于寄存器


应用/进程/虚拟机的对应


Dalvik虚拟机依赖操作系统底层

线程调度和管理,内存分配和管理,互斥等
14
Linux内核

Android的操作系统核心

Android 4.0之前的Linux内核是基于Linux 2.6 Android 4.0、4.1和4.2是基于Linux 3.0 但不是完全的Linux,不包含全部的Linux

前台activity启动对话框时

服务进程

进程拥有绑定到可见activity的Service 进程运行了被startService()启动的Service
进程拥有不可见的activity 进程,不拥有任何active的组件

后台进程

空进程

24
Android进程(6)

Android根据进程中当前active组件的重要性,来安 排其进程级别




访问摄像头和GPS等硬件 自带的Google地图和LBS服务 后台服务 SQLite数据库 数据共享和应用程序通信 图形支持 优化的内存和进程管理 …

Dalvik虚拟机的特征

专有文件格式.dex


通过dex将应用中所定义的许多类生成的class文件整合到一个文件中,减 少了冗余信息,文件大小和I/O操作数量,提高类的查找速度 增加对新操作码的支持 文件结构简洁,使用等长指令,执行效率高 扩大了只读结构大小,利于程序间数据共享
针对小内存进行了优化 提高了代码执行效率,代价是在硬件和通用性上的降低 实现进程之间的隔离,保护
Android SDK
Android SDK
相关主题