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

news2024/11/15 10:48:50

文章目录

  • 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.coloradmin.cn/o/357724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL语句创建视图:

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…

基于SpringBoot的在线文档管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

进程-操作系统结构

进程-操作系统结构 中文仅本人理解&#xff0c;有错误请联系我。 操作系统为不同方面服务&#xff0c;有不同的设计角度。 为用户&#xff1a; 使用 为程序员&#xff1a;创造 程序员需要关注的就是system call接口的调度 file systems&#xff1a;ntfs&#xff0c;ext4 commu…

eclipse快捷开发学习笔记

快速收起java类中的所有代码当类中方法过多时&#xff0c;收起所有方法&#xff0c;可以方便查看注释找到方法右击左侧栏任意行号位置-点击Folding-点击Collapse All效果图如下代码格式化混乱的代码格式化后&#xff0c;方便阅读分析菜单栏-Source-Format效果如下3.查看方法被哪…

Bland-Altman图

介绍 Bland-Altman图是一种一致性评价测量方法&#xff0c;简称BA&#xff0c;常用于医学实验和数据分析。 可使用它检测两组数据的一致性&#xff0c;比如对比新旧两种方法&#xff0c;对比一组实际值和预测值等。相对于校准曲线&#xff0c;它能更好地对比两组数据中每个数据…

Unit Test and Integration Test

Unit Test and Integration Test Background It is the first time that I try to write an article in English. In the past, I didn’t write test code. Just thinking QA is responsible for testing. As a developer, I don’t need to care about tests. Although I …

Robust Self-Augmentation for Named Entity Recognition with Meta Reweighting

摘要 近年来&#xff0c;自我增强成为在低资源场景下提升命名实体识别性能的研究热点。Token substitution and mixup &#xff08;token替换和表征混合&#xff09;是两种有效提升NER性能的自增强方法。明显&#xff0c;自增强方法得到的增强数据可能由潜在的噪声。先前的研究…

【Vue3源码】第四章 实现isReadonly和isReactive

【Vue3源码】第四章 实现isReadonly和isReactive 前言 上一章节我们实现readonly API&#xff0c;并且优化之前写的reactive API。这一章我们实现isReadonly和isReactive两个API。 1、实现isReactive 官网是这么介绍的&#xff1a;检查一个对象是否是由 reactive() 或 shallo…

WebView2 (Chromium) 右键菜单大全

在开发WebView2浏览器时&#xff0c;需要定制右键上下文菜单&#xff0c;但是微软的官方网站上没有详细的菜单&#xff0c;这里整理出来&#xff0c;以方便大家使用。以下是在win11上测试获取的&#xff0c;经过测试win7上稍有不同。一、网页上空白处右键 Target&#xff1a;Pa…

Mybatis Notes

文章目录1 Mybatis 介绍1.1 快速入门2 JDBC2.1 JDBC介绍2.3 JDBC问题分析2.4 Mybatis与JDBC技术对比3 数据库连接池3.1 数据库连接池介绍3.2 数据库连接池产品产品3.3 Druid引入项目4lombok4.1 lombok介绍4.2 lombok使用4.2.1 在pom.xml文件中引入依赖4.2.2 pojo类代码引入1 My…

强化学习 Reinforcement Learning(1) ~ 介绍

1. 强化学习概念和分类 强化学习&#xff0c;Reinforcement Learning 通过价值选行为&#xff1a; Q LearningSarsaDeep Q Network 直接选行为&#xff1a; Policy Gradients 想象环境并从众学习&#xff1a; Model Based RL 1.1 通过环境分类 1.1.1 不理解环境 Model-Fr…

4.5 习题(王晓云 主编)

一、选择题1. 下面( ) 是错误的if 语句&#xff08;设int x,a,b;&#xff09;BA&#xff09;if (ab) x; B&#xff09;if (a<b) x;C&#xff09;if (a-b) x; D&#xff09;if (x ) x;2. 以下程序片段( )。Dvoid main ( ){int x0,y0,z0;if (xyz) printf(“***”);else printf…

RT-Thread SP使用教程

RT-Thread SPI 使用教程 实验环境使用的是正点原子的潘多拉开发板。 SPI从机设备使用的是BMP280温湿度大气压传感器。 使用RT-Thread Studio搭建基础功能。 1. 创建工程 使用RT-Thread Studio IDE创建芯片级的工程。创建完成后&#xff0c;可以直接编译下载进行测试。 2.…

JVM学习篇垃圾收集器ParNewCMS与底层三色标记算法详解

1. 垃圾收集算法 2. 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法…

因果推断7--深度因果模型综述(个人笔记)

目录 0摘要 1介绍 2预习 3治疗和指标 4深层因果模型的发展 4.1发展时间表 4.2模型分类 5典型的深层因果模型 6实验指南 6.1数据集 6.2code 6.3实验 7结论 参考 编码 1.自编码器(AE)&#xff1a; 2.去噪自编码器(DAE) 3.变分自编码器VAE 4.去耦变分自编码 文章…

复旦MBA父女“接力”,圆梦复旦|校友故事

父亲&#xff1a;钱一&#xff0c;2006级复旦MBA校友      女儿&#xff1a;钱盈&#xff0c;2017级财务管理本科&#xff0c;金融硕二年级在读      在管院的众多校友中&#xff0c;有这样一对父女&#xff1a;2006年&#xff0c;父亲钱一考上了复旦MBA&#xff0c;每…

node基于springboot 口腔卫生防护口腔牙科诊所管理系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 JAVA简介 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 SPRINGBOOT框架 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.…

Hadoop配置文件常用配置-Yarn容器调度策略配置

Yarn资源调度 当同时向Yarn集群提交多个Job任务时&#xff0c;Yarn可以对任务进行资源&#xff08;CPU、MEMORY&#xff09;隔离。 容器调度策略是Yarn默认的调度策略&#xff0c;容器调度策略把整个集群资源划分成队列来管理&#xff0c;默认有一个root根队列&#xff0c;下…

聚类-理论补充

目录 一。聚类的定义 二。相似度/距离计算方法总结 1.闵可夫斯基距离Minkowski/欧式距离 2.杰卡德相似系数(Jaccard) 3.余弦相似度(cosine similarity) 4.Pearson相似系数 5.相对熵(K-L距离) 6.Hellinger距离 三。聚类的基本思想 四。k-Means算法 五。对k-Means的思…

图像显著性目标检测

一、概述 1、定义 图像显著性检测(Saliency Detection,SD)&#xff0c; 指通过智能算法模拟人的视觉系统特点&#xff0c;预测人类的视觉凝视点和眼动&#xff0c;提取图像中的显著区域(即人类感兴趣的区域)&#xff0c;可以广泛用于目标识别、图像编辑以及图像检索等领域&am…