建立一個系統的Service,能通過ServiceManager.getService取得service
Java層service顧名思義即為從 Java層提供的service,它與 C++層的服務不同之處在於其service程式的執行由系統( ServiceManager)統一維護。在檔案 frameworks/base/services/java/com/android/server/SystemServer.java 中我們可以看到以下程式碼:
AlarmManagerService alarm = new AlarmManagerService (context );
ServiceManager.addService (Context.ALARM_SERVICE alarm );
2.在目錄frameworks/base/services/java/com/android/server增加 service的實現檔案:
3. 將 java服務新增到 ServiceManager中
自此,重新編譯 Android並執行,我們所建立的服務即可訪問,下面是演示如何呼叫:
同樣在 package/apps下任意建立一個應用,呼叫服務的方法如下:
上面我們使用的是 Android內部的方法來獲取服務,當然也可以使用公開的 API: context.getSystemService來獲取。
AlarmManagerService alarm = new AlarmManagerService (context );
ServiceManager.addService (Context.ALARM_SERVICE alarm );
這個操作在系統啟動時完成,由 ServiceManager 負責建立服務程式並執行之。所以我們要做的事就是實現一個 java 服務,並將其新增到這裡並由系統執行起來,以下是具體實現步驟:
1. 在目錄frameworks/base/core/java/android/os中增加自己的 AIDL檔案用來申明服務:
BelyService.aidl:
- package android.os;
- interface IBelyService {
- int calculateSqu(int value);
- }
2.在目錄frameworks/base/services/java/com/android/server增加 service的實現檔案:
BelyService.java:
- package com.android.server;
- import android.content.Context;
- import android.os.IBelyService;
- public class BelyService extends IBelyService.Stub {
- public BelyService(Context context){
- super();
- }
- public int calculateSqu(int val){
- return val*val;
- }
- }
3. 將 java服務新增到 ServiceManager中
在檔案 frameworks/base/services/java/com/android/server/SystemServer.java新增:
- BelyService bs = new BelyService(context);
- ServiceManager.addService("BelyService", bs);
自此,重新編譯 Android並執行,我們所建立的服務即可訪問,下面是演示如何呼叫:
同樣在 package/apps下任意建立一個應用,呼叫服務的方法如下:
- import android.os.ServiceManager;
- import android.os.IBelyService;
- IBelyService bs = IBelyService.Stub.asInterface(ServiceManager.getService("BelyService"));
- int ret = bs.calculateSqu(9);
上面我們使用的是 Android內部的方法來獲取服務,當然也可以使用公開的 API: context.getSystemService來獲取。
相關文章
- .NET 6學習筆記(2)——通過Worker Service建立Windows Service筆記Windows
- 如何在Kubernetes裡建立一個Nginx serviceNginx
- 建立windows serviceWindows
- Laravel框架:通過自定義命令建立service服務層初體驗Laravel框架
- 銀河麒麟系統如何建立rc-local.service服務?
- Application,Activity,Service的建立流程(1)APP
- Application,Activity,Service的建立流程(2)APP
- k8s通過Service訪問PodK8S
- systemd 和 如何修改和建立一個 systemd service (Understanding and administering systemd)
- 使用make命令建立Service類
- 【Azure微服務 Service Fabric 】使用az命令建立Service Fabric叢集微服務
- 使用SAP CDS view快速建立一個Fiori應用,管理Service OrderView
- Service啟動過程
- Service的一些迷思
- SAP CRM如何建立支援Web Service的WORD模板Web
- SAP CRM如何建立支援Web Service的PDF模板Web
- Android系統原始碼分析--Service啟動流程Android原始碼
- Android系統原始碼分析–Service啟動流程Android原始碼
- Service
- 【Azure App Service】在App Service for Windows上驗證能佔用的記憶體最大值APPWindows記憶體
- Android Service詳解(一)Android
- android native service編寫及兩個服務程式通訊Android
- 建立一個自己的 Linux系統Linux
- 教程|使用Istio實現一個Service Mesh以簡化微服務間的通訊模式微服務模式
- 在Google的GKE上建立支援Internal Load Balancer的ServiceGo
- win10系統Antimalware Service Executable程式佔用cpu過高如何解決Win10
- Win10系統開啟terminal service服務的方法Win10
- SAP OData service的執行是如何從Gateway系統轉交到backend系統Gateway
- 4-AIII–Service跨程式通訊:aidlAI
- Docker容器內部能ping通ip,ping不通域名(Name or service not known)解決方法Docker
- Android ServiceAndroid
- 如何使用FastReport.Service.dll建立Web服務ASTWeb
- Service呼叫其他Service的private方法, @Transactional會生效嗎(上)
- 【Azure App Service】在App Service for Windows上驗證能佔用的記憶體最大值Y5APPWindows記憶體
- S/4HANA服務訂單Service Order的批量建立
- k8s之Service詳解-Service使用K8S
- 如何在SAP CRM裡建立和消費Web serviceWeb
- Android中的Web ServiceAndroidWeb