建立一個系統的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
- 使用angular建立一個serviceAngular
- 建立windows serviceWindows
- 如何在Kubernetes裡建立一個Nginx serviceNginx
- Laravel框架:通過自定義命令建立service服務層初體驗Laravel框架
- 銀河麒麟系統如何建立rc-local.service服務?
- Android Service 服務(一)—— ServiceAndroid
- k8s通過Service訪問PodK8S
- 通過Azure File Service搭建基於iscsi的共享盤
- 內建系統賬戶:Local system/Network service/Local Service 區別
- 使用make命令建立Service類
- 【Azure微服務 Service Fabric 】使用az命令建立Service Fabric叢集微服務
- Android中Service的一個Demo例子Android
- 使用SAP CDS view快速建立一個Fiori應用,管理Service OrderView
- 通過SoapHeader來增強Web Service的安全性HeaderWeb
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- Application,Activity,Service的建立流程(1)APP
- Application,Activity,Service的建立流程(2)APP
- 利用WCF建立簡單的RESTFul ServiceREST
- 多個model共用一個service可以嗎
- 監控Linux系統下的host和serviceLinux
- Service啟動過程分析
- Android Service的啟動過程Android
- 什麼是web service?- SOAP Web Service & Restful Web ServiceWebREST
- SAP CRM如何建立支援Web Service的word模板Web
- SAP CRM如何建立支援Web Service的PDF模板Web
- Activiti中的各個service的作用
- Azure一個Cloud Service支援多個公網地址Cloud
- 【Azure App Service】在App Service for Windows上驗證能佔用的記憶體最大值APPWindows記憶體
- systemd 和 如何修改和建立一個 systemd service (Understanding and administering systemd)
- Activity與Service通訊的方式有三種:
- Android中通過Messenger與Service實現程式間雙向通訊AndroidMessenger
- 通過Mesos、Docker和Go,使用300行程式碼建立一個分散式系統DockerGo行程分散式
- 通過 Mesos、Docker 和 Go,使用 300 行程式碼建立一個分散式系統DockerGo行程分散式
- Service異常:Service Intent must be explicitIntent
- 教程|使用Istio實現一個Service Mesh以簡化微服務間的通訊模式微服務模式
- 構建一個基於 Spring 的 RESTful Web ServiceSpringRESTWeb
- Web Service難道又是一個美麗的童話?Web