Android4.0添加java層服務

同前一篇文章類似,此文旨在簡單介紹一下如何在 java層添加自己的服務,相關的理論網上已經有很多文章,在此不在詳述。

Java層服務顧名思義即爲從 Java層提供的服務,它與 C++層的服務不同之處在於其服務進程的運行由系統( ServiceManager)統一維護。在文件 frameworks /base /services /java /com /android /server /SystemServer.java 中我們可以看到以下代碼:

AlarmManagerService alarm = new AlarmManagerService (context );

ServiceManager .addService (Context .ALARM_SERVICE , alarm );

這個操作在系統啓動時完成,由 ServiceManager 負責創建服務進程並運行之。所以我們要做的事就是實現一個 java 服務,並將其添加到這裏並由系統運行起來,以下是具體實現步驟:

實現自己的 java層 service

1. 在目錄

frameworks/base/core/java/android/os中增加自己的 AIDL文件用來申明服務:

IJobenService.aidl:

package android.os;

/** {@hide} */
interface IJobenService
{
    int calculateSqu(int value);
}


2.       在目錄

frameworks/base/services/java/com/android/server增加 service的實現文件:

JobenService.java:

package com.android.server;
import android.content.Context;
import android.os.IJobenService;

public class JobenService extends IJobenService.Stub{
	public JobenService(Context context) {
		super();
	}
	public int calculateSqu(int val) {
	return val*val;
	}
}

 

3.       將 java服務添加到 ServiceManager中:

try {    
                Slog.i(TAG, "Joben Server");
            //JobenService js = new JobenService(context);
            ServiceManager.addService("JobenService", new JobenService(context));
            } catch (Throwable e) {
                reportWtf("starting joben Service", e);
            }

 4.     在/framework/base/下的Android.mk裏添加自己的aidl

          core/java/android/os/IJobenService.aidl \

自此,重新編譯 Android並運行,我們所創建的服務即可訪問,下面是演示如何調用:

同樣在 package/apps下任意創建一個應用,調用服務的方法如下:

 

import android.os.ServiceManager;

import android.os.IJobenService;

IJobenService js = IJobenService.Stub.asInterface(ServiceManager.getService("JobenService"));

int ret = bs.calculateSqu(9);


 

上面我們使用的是 Android內部的方法來獲取服務,當然也可以使用公開的 API: context.getSystemService來獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章