Android Framework或應用程序中所需要的主要API都是以系統服務的形式提供的。
例如獲取終端的當前位置,讀取感應器的數值,撥打電話等。
一、Android服務的種類
??? Android系統中有兩類服務
??? 一類是系統服務,由Framework提供
??? 另一類是應用程序服務,應用程序開發者繼承并實現Service類開發出來的
圖
二、Android應用程序服務
應用程序服務是Android四大組件的一種, 通過繼承Android SDK的Service類實現
可以通過以下兩種方式使用這些服務
<1> startService
只是想著后臺啟動一個執行特定任務的服務
<2>bindService
想通過服務提供的界面實現對服務的控制
三、應用程序服務的分類
應用程序服務分為
Local Service?????
創建服務的客戶端與服務在同一進程,本地服務只能在創建該服務的應用程序內部使用,
當應用程序終止時,本地服務也一同終止,不論使用哪種方法啟動的服務(startService或者bindService)
Remote Service
創建服務的客戶端與服務不在同一個進程,客戶端要使用服務必須通過IPC機制。
AIDL用于約束兩個進程間的通信規則,共編譯器生成代碼。用來實現Android設備上兩個進程間的IPC。
遠程服務需要在<service>標簽中加入android:process這一屬性, 如果未指定該屬性, 相關服務將以本地服務的形式存在并運行。
1. 本地服務Local Service
圖
通過Binder getService獲取本地服務LocalService的引用。
2. 遠程服務RemoteService
圖
ISecondary.aidl -> 編譯器生成ISecondary.java
解析
服務端需要繼承ISecondary.stub并實現getPid()
ISecondary.Stub.onTransact(){
?...
case TRANSACTION_getPid:
...
int _result = this.getPid(); //由繼承stub的服務子類實現功能
reply.writeInt(_result);
...
...
}
客戶端使用ISecondary.Proxy通過這個代理完成與服務端的通信
private static class Proxy implements com.example.android.apis.app.ISecondary{
??? private android.os.IBinder mRemote;
??? Proxy(android.os.IBinder remote){
??????? mRemote = remote;//mRemote 保存了引用遠程服務的Binder
??? }
??? public android.os.IBinder asBinder(){
??????? return mRemote;
??? }
??? public int getPid{
??????? ...
??????? mRemote.transact(Stub.TRANSACTION_getPid, _data, _reply, 0);
??????? ...
??? }
}
四、Android系統服務
圖
1. 系統服務分類
本地系統服務????????? 使用C++編寫,運行在Libraries層,主要是AudioFlinger, SerfaceFlinger
JAVA系統服務???????? 如ActivityManagerService?? LocationService,? 想要使用JAVA系統服務必須使用能夠與各服務通信的Local Manager對象。
五、運行系統服務
1.? Android系統啟動時,init進程已經啟動了這些系統服務,使用系統服務時不需要啟動它, 直接調用getSystemService使用即可。
2. 系統服務由MediaServer, SystemServer兩個系統進程運行。
圖
3. MediaServer的運行過程
圖
4. SystemServer的運行過程
圖
六、Android Service Framework, Binder Driver概要及相關術語
圖
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
巴巴多斯國家簡介 請詳細介紹巴巴多斯這個國家?巴巴多斯島在哪里? 巴巴多斯(Barbados)珊瑚石灰巖島位于東加勒比海小安的列斯群島最東端。它被海洋包圍,西面與圣盧西亞、圣文森特、格林納丁斯和格林納達隔水相望。1966年11月30日,巴巴多斯擁有一個穩定的民主政權,獨立于此。他是英聯邦的成員,他的名字來自葡萄牙語,指的是野生無花果樹。巴巴多斯國內生產總值為48.21億美元,人均國內生產總值為...
沈北七星山門票?沈陽沈北新區有一座七星山,是沈陽非常有特色的山峰。它的獨特之處在于它的山形分布和它的人文景觀。七星山背后是著名的遼河流域,背靠遼河,環繞沈陽。距沈陽僅30公里,交通十分便利。是沈陽值得一去的景點之一。沈陽七星山開放了嗎?七星山開闊,有七個景點三個頭,排列成北斗七星狀,故稱七星山。七星山位于沈北新區石佛寺鄉西北,遼河以南,西鄰沈陽新民(市)。七星山風景秀麗,地理位置獨特,松柏繁茂。七...
懷舊服保險絲哪里獲???可以在諾莫瑞根和荊棘谷的各種機械怪物后面投下引信,這些怪物的等級在30到40之間。魔獸世界懷舊服保險絲怎么得?荊棘谷(41.2,43.3)的微型礦車掉引信概率最高。而灼人峽谷(34.7,51.9)的柯朗克下降率略低,但相對較高。魔獸工程圖紙保險絲哪買?地點:東泉谷王勇鎮工程供應商。如何獲?。簭墓こ坦烫幉少?。過程:點擊U,打開你的信譽列表,殺死王勇鎮的工程供應商。然后跑路,...