当前位置:文档之家› Android平台应用软件开发

Android平台应用软件开发


13
Section 2.1: Android的4种嫡系组件 的 种嫡系组件 Android有4种一等公民 或暱称为嫡系亲 有 种一等公民 种一等公民(或暱称为嫡系亲 属),包括: ,包括: - Activity: 处理 互动的事情 处理UI互动的事情 - ContentProvider: 储存共享资料 - IntentReceiver: 接收讯息及事件处理 - Service:幕后服务 如硬件及 幕后服务(如硬件及 如硬件及Driver的服务 的服务) 的服务
24
- 结束程序: 结束程序:
25
Section 2.2: Intent-based Programming。

Android的4种嫡系组件(即Activity、Service、 IntentReceiver和ContentProvider)之间如何 互相沟通呢?就像我们打手机去车行叫出租 车,而不是直接到街道上叫车。我们送给行 一个简讯或一通电话,表明我们的「意图」 (Intent),当车行经理接到此意图,就依据 你的意图的内含条件而去挑选最合适的出租 车,然后派遣它去接你。
21
- 下载完毕 下载完毕:LoadActivity结束了。 - LoadService可以持续执行。
22
- 播放影片: FirstActivity启动了 播放影片: VideoActivity(在独立的进程里) - 使用到System Process里的组件
23
- 结束播放: 画面回到FirstActivity 结束播放:
30
● Android的Binder System负责高效率的IPC(跨
进程之沟通)。 ● Binder系统是在Native层的C/C++组件。Java 应用程序(如Activity体系之类别)是透过JNI界面 去呼叫Binder系统(或称组件)。 ● Binder类别体系的物件内含有Proxy和Stub标准 的远距沟通结构,由ServiceManager在Client端 诞生一个Proxy物件,给让Client端(如Activity)能 透过IBinder界面或由AIDL语言所定义的界面来 呼叫Proxy物件,再由Proxy来与C/C++层的远距 Service物件进行高效率的通讯。
Android平台应用软件开发 平台应用软件开发
主讲人:高焕堂
misoo.tw@
2008年11月
1
PART-1: Android平台软件架构 平台软件架构
2
Linux核心 核心:Android依赖Linux 2.6来提供核心的服务, 核心 例如存储器管理、进程(Process)管理、执行绪 (Thread)管理等。 Android Runtime:Java语言层级的Virtual Machine。 Libraries:Android里已经提供的C/C++库存组件(或 称模块)。例如,SQLite数据库系统、OpenGL 3D绘图 系统等。 应用框架(Application Framework, 简称AF):这是 应用框架 简称 结合Applications与Libraries的幕后主架构,让 Libraries组件能不断地为Applications所重复使用 (Reuse)。 应用程序(Applications):依据User的期望而将AF的 应用程序 组件及Libaraies组件组合而成的高阶服务。
29
Section 2.3: 跨进程的 跨进程的IPC沟通机制 沟通机制

在Android里,一个Package可以含有多个 Activity,这些Activity可以在同一个进程 (Process)里执行;也可以在不同的进程里执 行。基于Linux的安全限制,以及进程的基 本特性(例如,不同进程的位址空间是独立 的),Activity-a与Activity-b在同一个进程里 执行时,两者沟通方便也快速。但是,当 Activity-a与Activity-b分别在不同的进程里执 行时,两者沟通就属于IPC跨进程沟通了, 不如前者方便,也慢些。
应用程序范例: 应用程序范例:以MP4播放为例
- 先选取影片
16
- 下载影片
17
- 播放影片
18
范例程序的状态变化图
19
内部进程(Process)的变化 的变化 内部进程
- 选取影片:FirstActivity物件在独立的 选取影片: 进程里执行。
20
- 下载影片 FirstActivity启动了 下载影片: LoadActivity(在同一个进程里执行) - LoadActivity使用到LoadService
10
Summary:衔接 与硬件的关键层 衔接AF与硬件的关键层
C/C++程式 程式 Linter TV
Buffer or Port
硬體
11
高焕堂 简介: 技术专长:从事软件开发长达30年,专精于物件导向 技术,及大型系统架构设计。近来,专研Google Android技术,并提供教育训练及技术顾问工作。 书籍出版:目前已经出版3本Android书籍,并将于 2008年12月出版第4本Android书籍。 教育训练:2008年 12月初将开 月初将开Android教育训练课 年 月初将开 教育训练课 程新班,详细请上网: 或 论坛。电话: (02)2739-8367 misoo.tw@ (高焕堂)
28

因此,Intent物件扮演着媒体中介的角色,提供 「Client组件 Android Server组件」之间互 相沟通的相关信息,实现了Client组件与Server 组件之间『不知而亦能用』之效果,这又称为 疏结合(Loosely-coupled)效果。其创造了Server 组件抽换的自由度,这又称为PnP(Plug and Play)。
Buffer or Port
硬體
5
以汉堡比喻Android 平台架构 以汉堡比喻
芝麻:Android 應用程式 上層麵包:Android 框架 牛肉和 Cheese:框架與硬體 之間的 C/C++組件 底層麵包:硬體組件
6
与25年前的开放硬件架构比较 年前的开放硬件架构比较
IBM PC 主機板(25 年前) Google Android 手機軟體框架(2008)
9ቤተ መጻሕፍቲ ባይዱ
充分发挥应用架构平台之特性(续 : 充分发挥应用架构平台之特性 续):
当我们基于这个新观点时,就能擅用应用 框架的天职和特性,懂得应用框架是稳定 的,而组件层是柔软而易于抽换(PnP)的。 认识到Android 设计的本意:构成虚实相依 的美好架构。应用框架与OS/硬件层两者皆 是实的,不易(也最好不必)更动。而介于 其中的组件层则是虚的,扮演Adapter的角 色,来融合两旁的实的层级。才不违背 Android身为应用框架的本性和天职。
8
充分发挥应用架构平台之特性(续 : 充分发挥应用架构平台之特性 续):
如果Android不更改,有如何移植到既有 的硬件和OS环境上呢? 为了延续自己的硬 件和OS平台,又希望Android的稳定,岂不 是硬碰硬了呢? 这可能是古典的嵌入式思 维所致,把系统视为三个层级:硬件、OS 和应用程序。然后把Android应用框架不是 归到应用程序层,不然就是归到系统层。 新的思维是:将应用框架视为独立的一层, 之上才是应用程序层。之下是可抽换的 C/C++组件层,更往下是OS和硬件。
14
它们必须宣告于AndroidManifest.xml里,如下: 里 如下: 它们必须宣告于
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="/apk/res/android" package="com.misoo.pkm"> <uses-permission xmlns:android="/apk/res/android" android:name="android.permission.INTERNET"> </uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".FirstActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="UNCHER" /> </intent-filter> </activity> <activity android:name=".LoadActivity"> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <service android:name=".LoadService" android:process=":remote"> <intent-filter> <action android:name="com.misoo.pkm.REMOTE_SERVICE" /> </intent-filter> </service> </application> </manifest> 15
相关主题