天天看點

Android service ( 二) 遠端服務

通常每個應用程式都在它自己的程序内運作,但有時需要在程序間傳遞對象,你可以通過應用程式ui的方式寫個運作在一個不同的程序中的service。在android平台中,一個程序通常不能通路其他程序中的記憶體區域。是以,他們需要把對象拆分成作業系統能了解的簡單形式,以便僞裝成對象跨越邊界通路。編寫這種僞裝代碼相當的枯燥乏味,好在android為我們提供了aidl工具可以來做這件事。

aidl(android接口描述語言)是一個idl語言,它可以生成一段代碼,可以使在一個android裝置上運作的兩個程序使用内部通信程序進行互動。如果你需要在一個程序中(例如:在一個activity中)通路另一個程序中(例如:一個service)某個對象的方法,你就可以使用aidl來生成這樣的代碼來僞裝傳遞各種參數。

要使用aidl,service需要以aidl檔案的方式提供服務接口,aidl工具将生成一個相應的java接口,并且在生成的服務接口中包含一個功能調用的stub服務樁類。service的實作類需要去繼承這個stub服務樁類。service的onbind方法會傳回實作類的對象,之後你就可以使用它了,參見下例:

先建立一個imyremoteservice.aidl檔案

如果你正在使用eclipse的android插件,則它會根據這個aidl檔案生成一個java接口類。生成的接口類中會有一個内部類stub類,你要做的事就是去繼承該stub類: 

當用戶端應用連接配接到這個service時,onserviceconnected方法将被調用,用戶端就可以獲得ibinder對象。參看下面的用戶端onserviceconnected方法:

作者: 一點點征服

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權利