Android framework层编写service(实验验证后修订)

大模型数据流向四层解析:输入、传输、处理、输出隐私风险全拆解 大语言模型(LLM)的隐私风险本质是数据在系统中不可控的流动过程。从基础概念看,LLM并非单点服务,而是由输入采集、传输加密、服务处理和输出缓存四个技术环节构成的数据流水线;其原理在于每个环节都存在权限越界、协议降级或设计缺位等工程漏洞;技术价值体现在可验证、可审计、可隔离的防护能力构建上;典型应用场景覆盖个人AI助手使用、企业合规部署及政务云安全接入;而真正有效的防护必须穿透‘关闭聊天记录’等表层功能,直击服务处理层与输出缓存层这两个高危节点——这正是本文聚焦LLM数据流向四层结构与实操加固方案的核心出发 阅读详情

        一个service是一个用用组件它能够在系统的后台中长期驻留并且不向外提供用户接口。一个应用程序组件可以开启一个服务,即便是用户切换到另一个应用程序了,服务仍将继续。另外,一个组件可以绑定到一个服务上并且能够进行进程间通信。例如,一个服务可以处理网络传输,播放音乐,进行文件的输入输出,并且和服务提供者进行交互,而所有的这一切将是在后台中运行的。

为了支持特殊的硬件或者特别需要提供API或者服务的情况下,需要编写的文件。

但是必须需要知道扩展系统服务和其它的framework层的特征是不提倡的。

设计的时候需要考虑的问题:

         在实现一个系统服务的时候需要回答关于线程需要,API,以及硬件接口的问题。完成一个系统service并不是一件容易的事情,但是如果能明白下面的问题也许会对你有所帮助:

         1  这个server出现的频率如何?如果服务只是偶然使用的,回叙和系统服务的内容一起运行会更好,尽管最常见的方式还是给他分配单独的线程。一个典型的不频繁使用的server是耳机的检测,它只需要在耳机的连接和移除的情况下运行。

         2  硬件如何访问?标准的硬件能够通过设备文件访问或者文件检测,但是最好的解决办法五一是实现HAL库。HAL能够更容易的将你的服务应用于其他的硬件,并且可以在需要的时候能够运行一些功能。

         3   API?在很多情况下,可以将你的服务作为一个intent receiver,不过你无疑要使用aidl。

         4   扩展framework?如果你想让你的新接口可见,你将不得不更新你的API描述并且建立你自己的SDK。(这很容易实现,通过“make update-api”,接着使用“make sdk”)然而,如果你只想让你自己的特定服务使用你的特征,你应该使用javadoc@hide选项。

         5   还有没有其他方式?添加你自己的服务到新发布的framework。为了最小化文件的添加,临时的改变已经存在的服务而不是添加你自己的服务。但是切记,如果是一些功能性的改变,可能会导致第三方的应用不能够工作。再次强调,如果你的服务只是一些特定的应用程序访问并且不是对所有人都有用的,可以考虑添加到应用程序中。

        代码示例

        下面是一个专有的服务的例子,它能够让你明白如何设置一个值。简单来讲,这个代码仅仅是添加到framework。对于产品的实现,代码应该放在产品的目录中。

实例化Interface

这个例子使用了aidl,所以第一步是加入接口定义文件:

frameworks/base/core/java/android/os/IEneaService.aidl

package android.os;

interface IEneaService{

/**

*{@hide}

*/

void setValue(int val);

}

这个接口文件需要添加到build 系统中:

frameworks/base/Android.mk

添加下面的内容到文件的165行(the end of the list of SRC_FILES)

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

实现服务

这个服务将产生一个工作线程,这个线程将完成所有的工作,作为系统服务进程的一部分。既然服务是由系统服务产生的,他将需要被放置在系统服务能够找到它的地方。

frameworks/base/services/java/com/android/server/EneaService.java

package com.android.server;


import android.comtent.Context;

import android.os.Hander;

import android.os.IEneaService;

import android.os.Looper;

import android.os.Message;

import android.os.Process;

import android.util.Log;


public class EneaService extends IEneaService.Stub{

private static final String TAG = "EneaService";

private EneaWorkerThread mWorker;

private EneaWorkerHandler mHandler;

private Context mContext;


public EneaService(Context context){

super();

mContext = context;

mWorker = new EneaWorkerThread("EneaServiceWorker");

mWorker.start();

Log.i(TAG,"Spawned worker thread" );

}


public void setValue(int val)

{

Log.i(TAG,“setValue” + val);

Message msg = Message.obtain();

msg.what = EneaWorkerHandler.MESSAGE_SET;

msg.arg1 = val;

mHandler.sendMessage(msg);

}


private class EneaWorkerThread extends Thread{

public EneaWorkerThread(String name){

super(name);

}


public void run(){

Looper.prepare();

mHandler = new EneaWorkerHandler();

Looper.loop();

}

private class EneaWorkerHandler extends Handler{

private static final int MESSAGE_SET = 0;

@Override

//此处需要特别强调的是如果我们在程序中添加了“@Override”编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错

//例如我在下面的函数中就写错了函数的名字在实际的编辑中就出现了报错的情况,所以如果要重写父类中的方法可以添加此选项。

public void handlerMessage(Message msg){

try{

if (msg.what == MESSAGE_SET){

Log.i(TAG."set message received:" + msg.arg1);

}

}catch(Exception e){

//Log,don't crash!

Log.e(TAG,"Exception in EneaWorkerHandler.handlerMessage:",e);

}

}

}

}

  此时并没有真正的完成service的编写过程。我们还需要完成的任务是将Service注册进SystemServer.java。

我们需要在合适的位置添加如下代码

try{

Slog.i(TAG,"Test Service");

ServiceManager.addService("Test", new EneaService(context));

}catch (Throwable e){

Slog.e(TAG,"Failure starting TestService Service",e);

}

        在完成这些操作后编译仍会出现问题,此时需要运行,make update-api命令,此时改变的文件是current.txt改变的内容如下:

+  public abstract interface IEneaService implements android.os.IInterface {

+  }

+

+  public static abstract class IEneaService.Stub extends android.os.Binder implements android.os.IEneaService {

+    ctor public IEneaService.Stub();

+    method public android.os.IBinder asBinder();

+    method public static android.os.IEneaService asInterface(android.os.IBinder);

+    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;

+  }

+

         你可能想输出的log信息线程id或者名字,来明确哪个线程正在执行中。

         现在,所有我们需要做的只是在输入make来完成创建工作,并且启动模拟器。使用logcat,你将通过打印信息知道线程已经被创建。

测试程序

        你很有可能也想测试你的服务。因此,你可以创建一个“Hello World”的Activity.把工程放在/vendor/enea目录。

        在你的测试项目的主Activity类中,添加以下代码到oncreate()

IEneaService em = 

IEneaService.Stub.asInterface(serviceManager.getService("EneaService"));

try{

em.setValue(7);//Any value would do, really.

}catch(Exception e){

e.printStackTrace();

}

        你也需要导入android.os.IEneaService 并且当然需要在Android.mk来增加。

        启动你的测试程序并且查看log。你应该现在能看到“set value”信息。

SDK集成实战指南:从选型到避坑的完整开发经验总结 软件开发工具包(SDK)作为现代软件开发的基石,本质上是预制的功能模块集合,旨在提升开发效率、降低重复劳动。其核心原理在于封装复杂底层逻辑,提供标准化接口,使开发者能聚焦业务实现而非基础设施。从技术价值看,优秀的SDK能显著加速产品迭代、保障功能稳定性,并促进技术生态标准化。在应用场景上,无论是移动端的推送与支付、前端的图表与编辑器,还是后端的云服务调用与数据库连接,SDK都扮演着关键角色。然而,实践中常遇到**环境配置地狱**和**依赖冲突**等挑战,例如Android SDK的安装网络问题或Gradle 阅读详情

相关推荐

MGIE:苹果端侧AI的指令级调度框架解析

端侧AI正从‘模型部署’迈向‘计算调度’新阶段,核心在于如何在隐私、功耗、实时性等硬约束下实现高效推理。MGIE(Multi-Granularity Instruction Execution)作为苹果提出的指令级执行框架,通过宏/微/纳三级粒度拆解AI任务,在NPU、GPU与Secure Enclave间动态协同调度,兼顾低延迟、低发热与强隐私。它不依赖大模型上云或全量端侧加载,而是以指令描述符+硬件受信执行重构AI落地范式,适用于iOS/macOS中高级开发者、边缘AI架构师及医疗/工业等高合规要求场景

2131

android service名字,android framework下新增系统服务Service

新增系统服务在Framework下面新增系统服务就可以和系统默认服务一样用getSystemService()方法去调用,这样做可以方便的对外提供第三方应用没有权限去做的接口。具体步骤如下:1. 编写***.aidl文件:在Eclipse插件下新建文件,文件后缀名为.aidl,然后再aidl文件中编写接口与方法。比如ITestService.aidl。我的示例如下:packageand...

weixin_29936201的博客 515

GPT-5.5工作流持久性与Agentic Coding实战指南

大语言模型正从单轮问答向持续化、闭环式知识工作流演进。工作流持久性(Workflow Persistence)和Agentic Coding是当前AI工程落地的核心技术概念——前者指模型在多跳任务中维持目标一致性与状态记忆的能力,后者强调自主调用工具、执行验证、迭代修正的完整工程闭环。这类能力直接决定AI能否嵌入真实研发、数据分析与科研协作场景,而非停留于提示词实验。本文基于GPT-5.5在Codex环境下的生产级实践,解析其分层推理缓存机制、工具调用成功率提升路径及token效率优化策略,覆盖API流式接

weixin_30595035的博客 524

Android 12 编译framewok和services详解

Android一直在不断的演进,系统层实现的逻辑也不断的在变化,所以我们还是要不断的学习、跟进,否则一些技术知识就会过时。现在针对Android 12的编译步骤详细讲解一下。

u010345983的博客 5511

千问Agent vs 微信AI:轻量级智能体的跨平台任务执行实战

智能体(Agent)正从大模型能力延伸走向真实场景落地,其核心在于将‘意图理解’转化为‘跨应用自动执行’。相比传统AI助手依赖云端响应与单一App闭环,现代轻量级Agent强调端侧推理、工具链自治、上下文记忆与人格化交互,具备在手机本地完成OCR识别、多源信息聚合、跨平台API调度等能力。尤其在报销填表、合同归档、会议纪要同步等高频重复性任务中,Agent通过行为建模与意图哈希实现‘说一句话,事就办完’的体验升级。本文聚焦千问Agent在微信生态外的任务执行层突破,详解其轻量化架构、Action Schem

weixin_30275415的博客 563

微软虾同事:轻量级AI智能体的持久化工作流实践

AI智能体正从一次性对话工具演进为具备状态记忆、持久执行与角色自治的数字员工。作为企业级AI落地的关键形态,轻量级AI智能体强调低代码配置、沙箱安全、字段级权限控制与跨系统编排能力,契合RPA升级、自动化运维、合规审查等高频场景需求。相比Copilot的会话式交互,它以岗位化部署、任务闭环和审计可追溯为特征,天然适配零信任架构与GDPR合规要求。本文聚焦微软Project Shrimp框架,解析其状态记忆、持久化执行与角色化自治三大核心机制,提供可复用的周报生成、线索分级与合规审查等真实工作流配置范式。

weixin_33858485的博客 436

Android 12 framework API规则和编译

在Framework层使用enum会报错:Enums are discouraged in Android APIs [Enum],因此一般都用@intDef代替,使用新的注解表示。当只有一个回调方法且永远不会有其他回调方法时使用Listener,且注册监听和解注册监听的方法必须是add/remove开头,否则Android Lint编译不过。如果上述注册方法没有在明确的线程中时,则需要在注册的时候包含Executor参数,如果不加的话,默认在主线程中回调。表示返回值、参数或者field可以是null。

lvyaer_1122的博客 3309

【信息科学与工程学】计算机科学与自动化——第八十四篇 C++分布式软件高并发/高可用算法01

4. 提交:协调者选择提交时间戳(>所有读时间戳),两阶段提交:a) 写意图预提交到所有参与者,b) 参与者持久化后确认,c) 协调者决定提交,异步清理意图。:客户端请求发送到协调节点,协调节点根据路由转发到主分片所在节点。Span有父子关系。1. 索引文档:客户端发送PUT请求到协调节点,协调节点路由到主分片节点,主分片写入本地,然后并行复制到副本分片,等待确认后响应客户端。3. 搜索:客户端发送搜索请求到协调节点,协调节点广播到所有相关分片,每个分片执行查询,返回结果,协调节点合并、排序、分页后返回。

weixin_49199313的博客 1080

Android framework add service

Android系统本身提供了很多系统服务,如WindowManagerService,PowerManagerService等。下面描述一下添加一个系统服务的具体步骤。 1、  撰写一个aidl文件,定义服务的接口,将在编译过程中通过aidl工具生成对应的java接口。一般系统服务的aidl文件都放在framework\base\core\java\android\os目录中。 以我所

Ritter Liu的专栏 5540

【企业管理】【管理科学】企业全岗位综合运营与组织知识矩阵体系01

岗位类别核心职责工作内容(详细)协作模式协商焦点博弈策略信任建立机制序列化工作流程关键绩效指标研发类​技术创新与产品开发1.需求分析:R=f(U,M,T) 2.概念设计:C=D(S,B) 3.原型开发 4.测试验证 5.文档编写敏捷团队、跨功能协作技术方案、资源分配、优先级纳什均衡:ui​(si​,s−i​)≥ui​(si′​,s−i​)代码审查、技术分享、结果透明瀑布模型/敏捷迭代1.专利数量P 2.技术就绪度TRL 3.缺陷密度D<0.1/KLOC其中:U=用户需求,

weixin_49199313的博客 744

【信息科学与工程学】【产品体系】第三十九篇 IT产品系列需求01 互联网行业的需求

经过多轮补充,现整理出覆盖存储、网络、计算、安全、数据治理、AI治理、物联网/工控、管理与经营​ 八大领域的完整需求目录,共60条​ 详细需求。

weixin_49199313的博客 1402

Android framework层编写service(实验验证后修订)

一个service是一个用用组件它能够在系统的后台中长期驻留并且不向外提供用户接口。一个应用程序组件可以开启一个服务,即便是用户切换到另一个应用程序了,服务仍将继续。另外,一个组件可以绑定到一个服务上并且能够进行进程间通信。例如,一个服务可以处理网络传输,播放音乐,进行文件的输入输出,并且和服务提供者进行交互,而所有的这一切将是在后台中运行的。 为了支持特殊的硬件或者特别需要提供API或者服务的

tronteng的专栏 951

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释

ANSYS/ANSYS Workbench生成mnf文件导入到Adams相关问题浅显解释。

weixin_45551870的博客 6984

Android14自动时区更新

摘要: 本文介绍了AOSP14中时区数据的分类与更新机制。时区数据分为两类: IANA tzdata(时区规则数据):存储于system/timezone等目录,决定时区ID的规则、国家映射及ICU显示,通过com.android.tzdata APEX更新。 GeoTZ边界数据(经纬度到时区映射):存储于packages/modules/GeoTZ,用于离线查询位置对应的时区,可通过APEX或APK更新。 更新步骤包括: 普通时区规则:下载IANA数据,调整Android维护的映射文件,运行脚本重新生成输

xianrenli38的博客 448

ADS软件操作(10)——DAC控件使用

该控件可以用于为元件定义随频率变换的参数,如放大器的最佳负载阻抗或者源阻抗,需要双频匹配时的优化等,下图是ADS中该控件的模型。

Zhuanzhuyan的博客 4399

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6789

Android系统真实体感:硬件约束、软件博弈与用户幻觉的动态平衡

Android并非抽象的操作系统概念,而是根植于物理世界的技术综合体。其运行本质由芯片寄存器、PCB信号完整性、传感器时钟同步和电池电化学特性等硬件铁律所限定;同时在AOSP开放框架、Vendor闭源Blob与OEM深度定制之间持续博弈;最终通过16ms渲染周期、触控预测插值与后台唤醒契约,构建出符合人眼与神经响应的‘流畅幻觉’。理解Android整体印象,关键在于穿透Framework层,直抵SoC启动序列、HAL时序偏差、Thermal HAL物理判决等实测细节——这正是Android系统工程师每日调试

diaoqi6581的博客 430

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

机器学习模型上线后的系统性风险与生产治理实践

机器学习模型部署不是项目终点,而是工程挑战的真正起点。当模型脱离离线环境进入真实业务流,其稳定性不再取决于算法精度,而取决于对系统边界、依赖失效、数据漂移和降级策略的深度设计。本文围绕特征服务超时、数据契约断裂、重试风暴等典型集成故障,解析如何构建具备可观测性、弹性降级能力与运行时数据校验的生产级ML系统;结合金融场景严苛的延迟预算(如反欺诈P99≤80ms)与业务影响监控,阐明性能优化本质是业务权衡而非纯技术调优。关键词涵盖模型监控、数据漂移检测、系统性假设断裂、生产治理。

xSTARx 122

YOLOv8 + TensorRT 实战:手把手教你用 C++ 实现实时视频流目标检测(附完整项目代码)

本文详细介绍了如何将YOLOv8与TensorRT结合,通过C++实现实时视频流目标检测的全流程。从环境配置、模型转换优化到视频处理架构设计,手把手教你构建高性能检测系统,并附完整项目代码。特别针对Windows平台下的TensorRT模型加速部署提供了实用技巧和性能优化方案。

weixin_29051193的博客 346

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3655

Android10 Framework层添加系统服务

2、在文件system/sepolicy/prebuilts/api/29.0/private/service_contexts添加如下内容。4、在文件system/sepolicy/prebuilts/api/29.0/public/service.te添加如下内容。1、在文件system/sepolicy/private/service_contexts添加如下内容。3、在文件system/sepolicy/public/service.te添加如下内容。高通865 Android10。

以后会多把工作中总结的知识、问题处理思路和方法通过博客分享出来,欢迎大家关注和共同探讨! 2246

面向元数据的 SAP UI 中枢:namespace sap.ui.mdc 全景解析

如果把应用前端比作一条数据到交互的装配线,sap.ui.mdc 就是那条线的标准化工装:以 PropertyInfo 描述原料,以 Delegate 定义装配方法,以 p13n 与 VariantManagement 交付面向个体的最终产物;而 Condition Model、Operator 与 ValueHelp 则让输入与筛选的语义落地。与 OData V4 服务与 Fiori Elements 宏构件组合使用时,它能在保持一致体验的同时,给自由式开发者留下足够的可编排空间。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 238

android framework 面试--如何添加系统服务

Android framework 面试

weixin_41591109的博客 451

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: Android 4.0 suspend/resume (kernel part)
下一篇: Android 4.0中按键的处理流程
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值