Android的IPC機制及多線程技術

Android 框架裡,一個應用套件 (Application Package) 通常含有多個 Java 類別 (Class) ,這些類可以在同一個進程 (Process) 裡執行;也可以在不同的進程裡執行。基於 Linux 的安全限制,以及進程的基本特性 ( 例如,不同進程的位址空間是獨立的 ) ,如果兩個類別 ( 或其物件 ) 在同一個進程裏執行時,兩者溝通方便也快速。但是,當它們分別在不同的進程裡執行時,兩者溝通就屬於 IPC 跨進程溝通了,不如前者方便,也慢些。

    一個進程是一個獨立的執行空間,不會被正在其他進程裡的程序所侵犯。這種保護方法是 Android 的重要安全機制。於是,得先認識進程的內涵,才能進一步了解跨進程 IPC(Inter-Process Communication) 機制。

    Android 的進程裡,有一個虛擬機 (Virtual Machine ,簡稱 VM) 的物件(對象),可執行 Java程式 碼,也引導 JNI 本地程式的執行,實現 Java C/C++ 程式之間的溝通;如下圖:

1   Android 進程裡的基本元素


每一個進程在誕生時,都會誕生一個主線程 (Main Thread) ,以及誕生一個 Looper 類別的物件和一個 MQ(Message Queue) 資料結構。每當主線程作完事情,就會去執行 Looper 類別。此時,不斷地觀察 MQ 的動態。如下圖:

2  Android 內部含有多個進程

 

主線程最主要的工作就是處理 UI 畫面的事件 (Event) ,每當 UI 事件發生時, Android 框架會丟信息 (Message) MQ 裡。主線程看到 MQ 有新的訊息時,就取出訊息,然後依據訊息內容而去執行特定的函數。執行完畢,就再繼續執行 Looper 類別,不斷地觀察 MQ 的動態。

    大家都知道,當兩個類別都在同一個進程裡執行時,兩者之間的溝通,只要採取一般的函數呼叫 (Function Call) 就行了,既快速又方便。一旦兩個類分別在不同的進程裡執行時,兩者之間的溝通,就不能採取一般的函數呼叫途徑了。只好採取 IPC 溝通途徑,如下圖:

3  Android 框架的 IPC 機制之例

 

Android 框架的 IPC 溝通仰賴單一的 IBinder介面( 接口)。此時 Client 端呼叫 IBinder介面 transact() 函數,透過 IPC 機制而呼叫到遠方 (Remote) onTransact() 函數。例如下圖裡的 myActivity1 myActivity2 myService 分別在不同的進程裡執行,透過 C++ 層的 IBinder介面 來進行跨進程的 IPC 溝通。

4   Android IPC 機制的 IBinder介面

 

在此圖的不同進程裡,各有其主線程 (Thread) ,這些線程可並行 (Concurrent) 執行,形成多線程 (Multiple-Thread) 的執行環境。例如上圖 4-14 myActivity1 myActivity2 並行執行,並透過 C++ 層的 JavaBBinder 類別而共享 ( 可能並行 ) Java 層的 myService 類別之服務。

 

转自: http://www.android1.net/Topic.aspx?BoardID=21&TopicID=1416

作者:高煥堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值