亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > OS > 安卓 > 正文

Android 添加系統服務的方法詳解

2024-09-11 17:15:21
字體:
來源:轉載
供稿:網友

一、前言

系統服務是Android中非常重要的一部分, 像ActivityManagerService, PackageManagerService, WindowManagerService, 這些系統服務都是Framework層的關鍵服務, 本篇文章主要講一下如何基于Android源碼添加一個系統服務的完整流程, 除了添加基本系統服務, 其中還包含添加JNI部分代碼和App通過AIDL調用的演示Demo, 調用包含App調用服務端, 也包含服務端回調App, 也就是完成一個簡單的雙向通信.

注: 測試代碼基于Android 7.1.1, 其他Android版本都是大同小異.

二、編寫AIDL文件

添加服務首先是編寫AIDL文件, AIDL文件路徑如下:

frameworks/base/core/java/com/example/utils/

1.ISystemEvent.aidl 內容如下:

package com.example.utils;import com.example.utils.IEventCallback;interface ISystemEvent {  void registerCallback(IEventCallback callback);  void unregisterCallback(IEventCallback callback);  void sendEvent(int type, String value);}

2.IEventCallback.aidl 內容如下

package com.example.utils;interface IEventCallback{  oneway void onSystemEvent(int type, String value);}

AIDL文件編寫, 教程很多, 我這里就不詳細說明了, 需要注意的是, 由于我們要實現回調功能, 所以必須寫一個回調接口 IEventCallback, 另外AIDL文件中 oneway 關鍵字表明調用此函數不會阻塞當前線程, 調用端調用此函數會立即返回, 接收端收到函數調用是在Binder線程池中的某個線程中. 可以根據實際項目需求選擇是否需要加 oneway 關鍵字.

AIDL只支持傳輸基本java類型數據, 要想傳遞自定義類, 類需要實現 Parcelable 接口, 另外, 如果傳遞基本類型數組, 需要指定 in out 關鍵字, 比如 void test(in byte[] input, out byte[] output) , 用 in 還是 out, 只需要記住: 數組如果作為參數, 通過調用端傳給被調端, 則使用 in, 如果數組只是用來接受數據, 實際數據是由被調用端來填充的, 則使用 out, 這里之所以沒有說服務端和客戶端, 是因為 in out 關鍵字用哪個和是服務端還是客戶端沒有聯系, 遠程調用和被調用更適合描述.

文件寫完后, 添加到編譯的 Android.mk 中 LOCAL_SRC_FILES 后面:

3.frameworks/base/Android.mk

LOCAL_SRC_FILES += /  core/java/android/view/IWindow.aidl /  core/java/android/view/IWindowFocusObserver.aidl /  core/java/android/view/IWindowId.aidl /  部分代碼省略 ...  core/java/com/example/utils/ISystemEvent.aidl /  core/java/com/example/utils/IEventCallback.aidl /  部分代碼省略 ...

編譯代碼, 編譯前需執行 make update-api, 更新接口, 然后編譯代碼,確保AIDL編寫沒有錯誤, 編譯后會生成對應java文件, 服務端要實現對應接口.

三、編寫Manager類

我們可以看到, Android API 中有很多Manager類, 這些類一般都是某個系統服務的客戶端代理類, 其實我們不寫Manager類, 只通過AIDL文件自動生成的類, 也可以完成功能, 但封裝一下AIDL接口使用起來更方便, 我們測試用的Manager類為 SystemEventManager, 代碼如下:

frameworks/base/core/java/com/example/utils/SystemEventManager.java

package com.example.utils;import android.content.Context;import android.os.RemoteException;import android.util.Log;import com.example.example.ISystemEvent;import com.example.IEventCallback;public class SystemEventManager {  private static final String TAG = SystemEventManager.class.getSimpleName();  // 系統服務注冊時使用的名字, 確保和已有的服務名字不沖突  public static final String SERVICE = "test_systemevent";  private final Context mContext;  private final ISystemEvent mService;  public SystemEventManager(Context context, ISystemEvent service) {    mContext = context;    mService = service;    Log.d(TAG, "SystemEventManager init");  }  public void register(IEventCallback callback) {    try {      mService.registerCallback(callback);    } catch (RemoteException e) {      Log.w(TAG, "remote exception happen");      e.printStackTrace();    }  }  public void unregister(IEventCallback callback) {    try {      mService.unregisterCallback(callback);    } catch (RemoteException e) {      Log.w(TAG, "remote exception happen");      e.printStackTrace();    }  }  /**   * Send event to SystemEventService.   */  public void sendEvent(int type, String value) {    try {      mService.sendEvent(type, value);    } catch (RemoteException e) {      Log.w(TAG, "remote exception happen");      e.printStackTrace();    }  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲qvod图片区电影| 在线观看亚洲区| 久久精品国产亚洲| 日韩动漫免费观看电视剧高清| 97在线观看视频国产| 欧美国产日韩一区二区在线观看| 国产精品久久久久不卡| 久久久国产在线视频| 91精品久久久久久久久久另类| 亚洲欧美精品伊人久久| 青青草国产精品一区二区| 日韩电影网在线| 成人性生交大片免费观看嘿嘿视频| 浅井舞香一区二区| 日本a级片电影一区二区| 日韩欧美在线视频免费观看| 精品五月天久久| 国产一区二区三区网站| 欧美寡妇偷汉性猛交| 2019亚洲男人天堂| 欧美高清无遮挡| 亚洲国产私拍精品国模在线观看| 亚洲国模精品私拍| 91精品国产99| 国产91精品久久久久久| 国产精品视频白浆免费视频| 成人黄色短视频在线观看| 亚洲精品欧美日韩专区| 在线播放日韩精品| 欧美重口另类videos人妖| 中文字幕亚洲一区二区三区五十路| 精品久久久久久| 日韩成人中文电影| 成人黄色免费看| 国产精品草莓在线免费观看| 亚洲第一区中文99精品| 亚洲精品久久久久久久久久久久久| 亚洲福利视频专区| 国产69精品久久久久99| 欧美肥臀大乳一区二区免费视频| 欧美一区二区三区免费观看| 亚洲美女中文字幕| 国产在线a不卡| 亚洲综合av影视| 午夜精品久久久99热福利| 亚洲成av人片在线观看香蕉| 疯狂做受xxxx欧美肥白少妇| 国产亚洲成精品久久| 浅井舞香一区二区| 久久久久久久影院| 91网站在线免费观看| 国产视频欧美视频| 欧美激情高清视频| 欧美激情亚洲国产| 欧美激情亚洲视频| 亚洲天堂av综合网| 91精品久久久久久久| 亚洲天堂免费观看| 91精品在线播放| 亚洲精品456在线播放狼人| 亚洲高清久久网| 亚洲第一福利网| 少妇高潮久久77777| 一区二区三区日韩在线| 久久国产精彩视频| 欧美第一黄色网| 日韩毛片中文字幕| 69av视频在线播放| 国产成人福利网站| 亚洲欧美激情精品一区二区| 日韩成人中文字幕| 久久久久久久久久亚洲| 国产精品jizz在线观看麻豆| 日韩在线免费视频观看| 欧美与黑人午夜性猛交久久久| 日韩欧美精品网址| 中文字幕在线精品| 亚洲精品一区久久久久久| 久久影院免费观看| 日韩网站在线观看| 精品久久久久久亚洲国产300| 91精品啪在线观看麻豆免费| 欧美性jizz18性欧美| 人人做人人澡人人爽欧美| 欧美疯狂xxxx大交乱88av| 久久69精品久久久久久久电影好| 国产精品xxxxx| 国产精品亚洲片夜色在线| 午夜精品久久久久久99热软件| 久久久久久999| 欧美丝袜一区二区三区| 亚洲国产日韩欧美综合久久| 国产成人综合av| 91九色国产视频| 日韩大胆人体377p| 日韩视频一区在线| 久久久久久久久久国产| 久久综合网hezyo| 欧美综合激情网| 亚洲国产精品人久久电影| 亚洲japanese制服美女| 欧美色xxxx| 日韩欧美精品免费在线| 亚洲国产精品国自产拍av秋霞| 亚洲欧美中文字幕| 欧美黑人巨大xxx极品| 国产九九精品视频| 久久久久久国产精品久久| 国产精品永久免费在线| 亚洲第一页在线| 久久国产视频网站| 日本亚洲精品在线观看| 欧美一级免费看| 国产精品福利在线观看网址| 国产成人精品电影久久久| 久久久久久69| 国产999在线| 久久99久久99精品免观看粉嫩| 久久影视电视剧免费网站清宫辞电视| 亚洲日本欧美中文幕| 91最新国产视频| 午夜欧美大片免费观看| 91精品视频网站| 粉嫩av一区二区三区免费野| 欧美一级电影免费在线观看| 国产成人综合亚洲| 色偷偷av一区二区三区乱| 日韩欧美国产中文字幕| 欧美成年人视频网站| 欧美孕妇毛茸茸xxxx| 日韩精品亚洲视频| 色系列之999| 精品久久久久久久久久| 国产精品精品久久久久久| 久久久精品一区二区三区| 国产精品激情av在线播放| 国语自产精品视频在线看抢先版图片| 一区二区三区精品99久久| 国产精品专区h在线观看| 国产精品亚洲视频在线观看| 欧美日韩xxxxx| 国产精品视频精品| 日韩欧美一区二区三区| 成人美女av在线直播| 久久久久国产精品www| 一区二区三区美女xx视频| www国产精品com| 国产成人精品视频| 欧美大片va欧美在线播放| 欧美大全免费观看电视剧大泉洋| 日韩在线观看免费全| 国产成人一区二区三区小说| 亚洲天堂精品在线| 久久精品在线视频| 久久久999成人| 热久久美女精品天天吊色| 日韩久久免费电影| 大胆人体色综合| 久久国产精品偷| 欧美区在线播放| 91极品女神在线| 国产精品h片在线播放| 国产精品美女主播在线观看纯欲| 欧美国产高跟鞋裸体秀xxxhd|