成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解讀Android虛擬機工作原理

移動開發(fā) Android
下面說明下什么Android虛擬機?首先需要查看下Android虛擬機的源代碼,這樣可以避免在以后的工作當中省了不少事情。

下面講述下Android虛擬機的組成部分和一些構(gòu)造原理,在介紹Android虛擬機之前,先要了解下什么是Android操作系統(tǒng),所謂的Android:是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google開發(fā),后由開放手機聯(lián)盟Open Handset Alliance)開發(fā)。

Linux系統(tǒng)中進程間通信的方式有:socket, named pipe,message queque, signal,share memory。Java系統(tǒng)中的進程間通信方式有socket, named pipe等。android應用程序理所當然可以應用JAVA的IPC機制實現(xiàn)進程間的通信,

取而代之的是Binder通信。Google為什么要采用這種方式呢,這取決于Binder通信方式的高效率。 Binder通信是通過linux的binder driver來實現(xiàn)的。Binder通信操作類似線程遷移(thread migration),兩個進程間IPC看起來就象是一個進程進入另一個進程執(zhí)行代碼然后帶著執(zhí)行的結(jié)果返回。

Binder的用戶空間為每一個進程維護著一個可用的線程池,線程池用于處理到來的IPC以及執(zhí)行進程本地消息,Binder通信是同步而不是異步。Android中的Binder通信是基于Service與Client的,所有需要IBinder通信的進程都必須創(chuàng)建一個IBinder接口。

系統(tǒng)中有一個進程管理所有的system service,Android虛擬機不允許用戶添加非授權(quán)的System service,當然現(xiàn)在源碼開發(fā)了,我們可以修改一些代碼來實現(xiàn)添加底層system Service的目的。

對用戶程序來說,我們也要創(chuàng)建server,或者Service用于進程間通信,這里有一ActivityManagerService管理JAVA應用層所有的service創(chuàng)建與連接(connect)。disconnect,所有的 Activity也是通過這個service來啟動,加載的。ActivityManagerService也是加載在Systems Servcie中的。

Android虛擬機啟動之前系統(tǒng)會先啟動service Manager進程,service Manager打開binder驅(qū)動,并通知binder kernel驅(qū)動程序這個進程將作為System Service Manager。然后該進程將進入一個循環(huán),等待處理來自其他進程的數(shù)據(jù)。用戶創(chuàng)建一個System service后,通過defaultServiceManager得到一個遠程ServiceManager的接口。

通過這個接口我們可以調(diào)用 addService函數(shù)將System service添加到Service Manager進程中,然后client可以通過getService獲取到需要連接的目的Service的IBinder對象。這個IBinder是 Service的BBinder在binder kernel的一個參考,所以service IBinder 在binder kernel中不會存在相同的兩個IBinder對象。

每一個Client進程同樣需要打開Binder驅(qū)動程序。對用戶程序而言,我們獲得這個對象就可以通過binder kernel訪問service對象中的方法。Client與Service在不同的進程中,通過這種方式實現(xiàn)了類似線程間的遷移的通信方式,對用戶程序而言當調(diào)用Service返回的IBinder接口后,訪問Service中的方法就如同調(diào)用自己的函數(shù)。

實現(xiàn)接口時有幾個原則:

拋出的異常不要返回給調(diào)用者. 跨進程拋異常處理是不可取的。IPC調(diào)用是同步的。如果你知道一個IPC服務需要超過幾毫秒的時間才能完成地話,你應該避免在Activity的主線程中調(diào)用。

也就是IPC調(diào)用會掛起應用程序?qū)е陆缑媸ロ憫? 這種情況應該考慮單起一個線程來處理,能在AIDL接口中聲明靜態(tài)屬性。IPC的調(diào)用步驟:

1. 聲明一個接口類型的變量,該接口類型在.aidl文件中定義。

 2. 實現(xiàn)ServiceConnection。

 3. 調(diào)用ApplicationContext.bindService(),并在ServiceConnection實現(xiàn)中進行傳遞. 

 4. 在ServiceConnection.onServiceConnected()實現(xiàn)中,你會接收一個IBinder實例(被調(diào)用的Service). 調(diào)用    YourInterfaceName.Stub.asInterface((IBinder)service)將參數(shù)轉(zhuǎn)換YourInterface類型。

 5. 調(diào)用接口中定義的方法。 你總要檢測到DeadObjectException異常,該異常在連接斷開時被拋出。它只會被遠程方法拋出。

 6. 斷開連接,調(diào)用接口實例中的ApplicationContext.unbindService()

【編輯推薦】

  1. 新一代的Android手機介紹 深度剖析Android SDK版本介紹
  2.  
  3. 谷歌Android手機能否站穩(wěn)中國
  4. PythonAndroid深度剖析Android應用程序的四種構(gòu)造塊
  5. 探秘與眾不同的Android系統(tǒng)?
責任編輯:chenqingxiang 來源: CSDN
相關(guān)推薦

2010-02-06 17:36:58

Dalvik虛擬機

2020-06-15 07:00:00

GitOpsKubernetesDevOps

2011-05-03 16:50:08

激光打印機工作原理

2010-03-19 10:56:32

交換機工作原理

2013-06-06 10:11:36

交換機技術(shù)交換機生成樹

2019-10-29 11:14:59

Vmware虛擬機NAT

2011-12-14 10:31:43

2010-03-11 10:05:21

服務器交換機

2010-03-18 11:16:24

全光交換機

2011-05-07 17:06:21

熱升華打印機工作原理應用

2010-03-16 13:20:25

智能交換機

2010-03-22 11:02:27

千兆以太網(wǎng)交換機

2010-03-19 09:04:50

Cisco 1800交

2016-09-27 20:12:33

Android虛擬機Android動態(tài)調(diào)試

2012-07-25 11:04:43

傳真機

2013-01-17 11:05:42

2019-08-27 16:23:41

Docker虛擬化虛擬機

2014-04-02 17:10:00

虛擬應用工作原理

2010-03-15 17:17:23

局域網(wǎng)交換機

2010-01-25 15:11:42

不對稱交換機
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人免费在线网 | 日韩欧美在线播放 | 欧美日本亚洲 | 国产永久免费 | 一区二区三区久久 | 99久久精品免费看国产小宝寻花 | 日本久草 | 激情六月丁香婷婷 | 久热免费 | 天天干夜夜操视频 | av在线一区二区三区 | 2018中文字幕第一页 | 一级欧美黄色片 | 久久久一区二区三区四区 | 精品欧美一区二区在线观看视频 | 91久色| 亚洲三区在线播放 | 2018天天干天天操 | 老头搡老女人毛片视频在线看 | 久久中文高清 | 久久免费精品 | 91av精品 | 亚洲欧美在线视频 | 国产视频欧美 | 日韩在线一区二区 | av中文字幕在线 | 9久久| 欧美一级二级视频 | 中文字幕欧美日韩一区 | 亚洲精品乱码久久久久久久久久 | 国产一级大片 | 亚洲伊人久久综合 | 国产一区二区av | 玖玖国产 | 成人精品视频99在线观看免费 | 国产激情第一页 | 国产偷录视频叫床高潮对白 | 91新视频| 一区二区三区中文字幕 | 国产精品1区2区3区 一区中文字幕 | 成年人在线视频 |