当前位置: 首页 > news >正文

6.关于系统服务的思考—— native vs java

文章目录

  • native服务 以sensor service为例
  • Native 服务
  • java 服务, 以vibrate为例
  • java 服务 以一个demo为例

native服务 以sensor service为例

  1. service启动
    1. SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>SensorService.java构造中startSensorServiceNative
    2. frameworks/base/services/core/jni/
      1. onlod.cpp 中注册
      2. com_android_server_sensor_SensorService.cpp中register_android_server_sensor_SensorService
    3. NativeSensorService::NativeSensorService
      1. sp<IServiceManager> sm(defaultServiceManager())
      2. mService = new SensorService()
      3. sm->addService native service 添加到service manager
  2. ipc
    1. app 与sensor service 通过sensor manager
      1. frameworks/base/core/jni/AndroidRuntime.cpp 中注册 jni
      2. frameworks/base/core/jni/android_hardware_SensorManager.cpp
      3. SensorManager::getService()
        1. sp<IServiceManager> sm = defaultServiceManager();//frameworks/native/libs/binder/include/binder/IServiceManager.h
        2. *outService = interface_cast<INTERFACE>(sm->getService(name));
    2. sensor service 与hal
      1. SensorDevice::connectHalService()
        1. sp<android::hardware::sensors::V2_1::ISensors> sensors =
          android::hardware::sensors::V2_1::ISensors::getService();
          在这里插入图片描述

Native 服务

hal 服务可以直接给app调用
有空再研究

java 服务, 以vibrate为例

  1. 启动
    1. SystemServer.java 中new VibratorService(context)
    2. ServiceManager.addService(“vibrator”, vibrator);
  2. ipc
    1. app 与vibrator service 通过 SystemVibrator.java :
      1. ContextImpl getSystemService 静态函数中new SystemVibrator
      2. SystemVibrator 构造中 mService = IVibratorService.Stub.asInterface(ServiceManager.getService(“vibrator”));
      3. 定义aidl, frameworks/base/core/java/android/os/IVibratorService.aidl
      4. public class VibratorService extends IVibratorService.Stub
    2. vibrator servic 与hal 涉及硬件通信的后续再看

java 服务 app 系统应用 三方应用

java 服务 以一个demo为例

https://blog.nowcoder.net/n/691384d649604fcd8ccb32842e8bf9e1

  1. 启动

    1. frameworks\base\core\java\android\os\IFregService.aidl // 声明 set get
    2. FregService extends IFregService.Stub
      1. 构造中 mPtr = init_native();–>> ipc open设备节点
      2. setVal–>>setVal_native(mPtr, val);
      3. frameworks\base\services\jni\com_android_server_FregService.cpp
      4. freg_init–>> register_android_server_FregService
    3. jni: // frameworks\base\services\jni\com_android_server_FregService.cpp
      1. JNINativeMethod method_table[] register_android_server_FregService {jniRegisterNativeMethods }
    4. SystemServer.java ServiceManager.addService("diskstats", new DiskStatsService(context));
    5. ServiceManager.addService(“freg”, new FregService());
  2. ipc

    1. app与FregService .activity onCreate中

      fregService = IFregService.Stub.asInterface(
      // 获得一个名称为“ freg ”的服务的 Binder 代理对象接口
      ServiceManager.getService(“freg”));

http://www.lryc.cn/news/13278.html

相关文章:

  • SQL语句创建视图:
  • 使用BP神经网络和Elman Net预测航班价格(Matlab代码实现)
  • JavaWeb9-volatile解决内存可见性和指令重排序问题
  • Docker - 镜像操作命令
  • 全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记
  • Tomcat 线上调优记录
  • 学习 Python 之 Pygame 开发坦克大战(四)
  • New和Malloc的使用及其差异
  • 2023年细胞生物学复习汇总
  • 光伏VSG-基于虚拟同步发电机的光伏并网逆变器系统MATLAB仿真
  • 高可用 - 02 Keepalived_VRRP工作原理
  • vue实现xml在线编辑功能
  • GitHub Workflow
  • vue学习
  • Windows使用ssh协议远程连接ubuntu linux系统
  • 大数据处理 - Overview
  • 12-Composer的配置与使用详解
  • RK3566开启wifi自适应
  • shell编程之变量定义
  • Spring Cloud Alibaba 微服务简介
  • 【调试】GDB使用总结
  • 基于Spring、Spring MVC、MyBatis的招聘管理系统
  • 软件测试基础
  • 【算法基础】链表
  • [AUTOSAR][Fls模块] Flash Driver Module
  • 如何正确选择好用的投票平台微信公众平台投票链接链接投票平台
  • gocd部署应用
  • P2P视频聊天技术分析
  • MyBatis 的一级、二级缓存机制
  • 剑指 Offer 65. 不用加减乘除做加法