Binder機制分析(3)—— 實現自己的Service
本文是對《Android技術內幕-系統卷》第三章的摘抄和整理。
1)核心服務通常在獨立的程式裡執行。
2)必須提供IBinder 介面,讓應用程式可以跨程式繫結和呼叫。
3)因為共享,所以必須確保多執行緒安全(Thread-safe)。
4)以C++類別定義,獲取其物件,通過ServiceManager的協助,將該物件參考值傳給IServiceManager::addService()函式,加入到Binder Driver 裡。
5)應用程式可通過ServiceManager 的協助遠距離繫結該核心服務,此時ServiceManager 會回傳IBinder 介面給應用程式。
6)應用程式可通過IBinder::transact()函式與核心服務互傳資料。
2. 下面以C++程式碼為例來分析如何實現一個自己的Service。假設我們需要實現的服務介面為TestService,名稱為service.testservice,具體流程如下:
首先,定義ITestService介面,即TestService服務,如程式碼清單3-63所示。
2.1 定義ITestService介面
class ITestService: public IInterface
{
public:
DECLARE_META_INTERFACE(TestService);//申明巨集
virtual getTestService() = 0;
virtual setTestService() = 0;
}
2.2 然後,定義BnTestService介面和BpTestService介面,如程式碼清單3-64所示。
//BnTestService的定義
class BnTestService: public BnInterface<ITestService>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel
reply,
uint32_t flags = 0);
};
//BnTestService的實現
IMPLEMENT_META_INTERFACE(TestService, "Android.testservice.IestService");
status_t BnTestService::onTransact(
uint32_t code, const Parcel& data, Parcel
reply, uint32_t flags)
{
switch(code) {
case GET_TESTSERVICE: {
CHECK_INTERFACE(ITestService, data, reply);
return NO_ERROR;
} break;
}
//BpTestService的實現
class BpTestService: public BpInterface<ITestService>
{
public:
BpTestService (const sp<IBinder>& impl)
: BpInterface< ITestService >(impl)
{
}
//getTestService
//setTestService
}
2.3 寫好了自己的服務,最後是使用自己服務的方法
使用TestService
int main()
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
sm->addService("service.testservice",new TestService());
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
相關文章
- Binder機制
- Binder Java層的實現原理分析Java
- 3分鐘帶你看懂android的Binder機制Android
- Binder機制之AIDLAI
- Binder通訊機制
- 圖解Android中的binder機制圖解Android
- 藉助 AIDL 理解 Android Binder 機制——AIDL 的使用和原理分析AIAndroid
- Android Binder機制文章轉載Android
- Android進階(六)Binder機制Android
- 藉助 AIDL 理解 Android Binder 機制——Binder 來龍去脈AIAndroid
- Android IPC機制(三):淺談Binder的使用Android
- 理解 Android Binder 機制(二):C++層AndroidC++
- Kubernetes中Service機制
- 對Koa-middleware實現機制的深入分析
- 服務發現與負載均衡機制-Service負載
- Binder通訊機制與IPC通訊.md
- Linux系統呼叫詳解(實現機制分析)Linux
- 基於Kubernetes服務發現機制的探討Non Service
- Spring AOP 的實現機制Spring
- Android 系統原始碼-2:Binder 通訊機制Android原始碼
- Binder Java層分析Java
- MySQL中的MVCC實現機制MySqlMVC
- docker 實現 Redis 的哨兵機制DockerRedis
- Js非同步機制的實現JS非同步
- JVM原始碼分析之Attach機制實現完全解讀JVM原始碼
- Tomcat 7 啟動分析(五)Lifecycle 機制和實現原理Tomcat
- k8s replicaset controller 分析(3)-expectations 機制分析K8SController
- 併發機制的底層實現
- Nginx accept鎖的機制和實現Nginx
- [轉載]Spring AOP的實現機制Spring
- Android外掛化原理解析——Hook機制之Binder HookAndroidHook
- Android Binder實現示例(C/C++層)AndroidC++
- Spring IOC容器實現機制Spring
- NodeJS實現websocket代理機制NodeJSWeb
- NX實現機制淺析
- WPF原始碼分析系列一:剖析WPF模板機制的內部實現(一)原始碼
- WPF原始碼分析系列一:剖析WPF模板機制的內部實現(五)原始碼
- 實現自己的promisePromise
- Kafka核心中的分散式機制實現Kafka分散式