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機制分析(2)——從MediaService中看Binder的實現和使用(1)
- Binder機制分析(2)——從MediaService中看Binder的實現和使用(2)
- Binder機制分析(1)——Binder結構簡介
- Binder機制
- Binder學習(二)Binder機制解析
- Binder Java層的實現原理分析Java
- 3分鐘帶你看懂android的Binder機制Android
- Binder通訊機制
- Android的IPC機制BinderAndroid
- 【Android原始碼】Binder機制和AIDL分析Android原始碼AI
- Binder機制之AIDLAI
- Binder機制的細節補充
- Android 的 Handler 機制實現原理分析Android
- Android Binder機制淺析Android
- 圖解Android中的binder機制圖解Android
- 自己對Binder的理解
- C++物件導向特性實現機制的初步分析 Part3 (轉)C++物件
- Android進階(六)Binder機制Android
- android Binder機制深入淺出Android
- Android Binder機制文章轉載Android
- JAVA的反射機制==>用反射分析類的實現Java反射
- 藉助 AIDL 理解 Android Binder 機制——AIDL 的使用和原理分析AIAndroid
- Android 外掛化原理解析(3):Hook 機制之 Binder HookAndroidHook
- Android IPC機制(三):淺談Binder的使用Android
- Android的IPC機制(三)——Binder連線池Android
- 理解 Android Binder 機制(三):Java層AndroidJava
- C++ binder 實現C++
- 藉助 AIDL 理解 Android Binder 機制——Binder 來龍去脈AIAndroid
- 服務發現與負載均衡機制-Service負載
- 對Koa-middleware實現機制的深入分析
- 理解 Android Binder 機制(二):C++層AndroidC++
- Android系統之Binder通訊機制Android
- 理解 Android Binder 機制(一):驅動篇Android
- Binder通訊機制與IPC通訊.md
- Android 原始碼分析 --Handler 機制的實現與工作原理Android原始碼
- Linux系統呼叫詳解(實現機制分析)Linux
- Kubernetes中Service機制
- Js非同步機制的實現JS非同步