aidl的学习(1)aidl中java.lang.RuntimeException: Didn‘t create service “XXX“

1、build中版本号为30及以上时,aidl无效,解决方案

①在客户端的manifest.xml中添加一下代码,其中代码中的包名为服务端的包名

<manifest>
...
<application>
....</application>
<queries ><package android:name="com.example.clientapplication"/><intent><action android:name="android.intent.action.MService"/></intent>
</queries>
</manifest>

②修改build中的版本号

在这里插入图片描述

2、打开aidl中服务端的服务service出现闪退的问题

Caused by: 
java.lang.RuntimeException: Didn't create service "XXX" on path:
DexPathList[[zip file "/data/app/com.chemao.certification-2/base.apk"],
nativeLibraryDirectories=[/data/app/com.chemao.certification-2/lib/arm, /vendor/lib, /system/lib]]                                                     

方法:service的位置放错了,service应该放在java目录下。

aidl中服务端的目录结果如下所示:

在这里插入图片描述

3、跨进程通信aidl最简单的方法

①服务端

(1)AS切换模式为project,对main右键创建aidl文件,如下图:

在这里插入图片描述

(2)在创建的文件中定义想实现的接口

在这里插入图片描述

(3)build projection

如果rebuild出现问题的话,可以先clean projection

在这里插入图片描述

(4)创建类继承service,在service中创建内部类实现aidl中定义的接口数据,在java目录下创建,不要在aidl中进行创建,不然后续会出现问题。

在这里插入图片描述

public class MService extends Service {private IAidlInterface mBinder;@Nullable@Overridepublic IBinder onBind(Intent intent) {Log.d("TAG", "onBind: " + intent);return mBinder.asBinder();}@Overridepublic void onCreate() {super.onCreate();Log.d("TAG", "onCreate: ");mBinder = new Binder();}private class Binder extends IAidlInterface.Stub{private static final String TAG = "mBinder";@Overridepublic void basicTypes() throws RemoteException {Log.d(TAG, "basicTypes: " + "我是服务端数据信息");}}
}

(5)在manifest中定义service,不然service无作用,在定义service中,可以声明action进行隐式调用

在这里插入图片描述

到此为止,服务端的工作完成

②客户端

(1)在manifest中进行安全防护

在这里插入图片描述

②将服务端中aidl复制过来,和服务端一模一样,进行rebuild即可。

在这里插入图片描述

(3)在activity中进行服务的绑定,bindservice返回值为true,onServiceConnected中有打印,就知道服务成功。

public class MainActivity extends AppCompatActivity {private IAidlInterface mIExtraAidlInterface;private ServiceConnection mServiceConn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button = findViewById(R.id.name);//	bindService();mServiceConn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {mIExtraAidlInterface = IAidlInterface.Stub.asInterface(service);try {mIExtraAidlInterface.basicTypes();} catch (RemoteException e) {throw new RuntimeException(e);}Log.d(TAG, "onServiceConnected: ");}@Overridepublic void onServiceDisconnected(ComponentName name) {//	mIExtraAidlInterface = null;Toast.makeText(MainActivity.this, "0000", Toast.LENGTH_SHORT).show();Log.d(TAG, "onServiceDisconnected: ");}};bindService();}private void bindService(){Intent intent = new Intent();intent.setAction("android.intent.action.MService");intent.setPackage("com.example.clientapplication");ResolveInfo resolveInfo = getPackageManager().resolveService(intent, 0);Log.d(TAG, "bindService: " + resolveInfo);bindService(intent, mServiceConn, BIND_AUTO_CREATE);Log.d(TAG, "mServiceConn: " + mServiceConn);}@Overridepublic boolean bindService(Intent service, ServiceConnection conn, int flags) {Log.d(TAG, "bindService: service " + service + "conn " + conn + "flags  " + flags);Log.d(TAG, "bindService: " + super.bindService(service,conn,flags));return super.bindService(service, conn, flags);}@Overrideprotected void onDestroy() {super.onDestroy();unbindService(mServiceConn);}
}

对于aidl的具体说明,及复杂类型或者回调数据的使用,可见https://developer.android.google.cn/guide/components/aidl?hl=zh_cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1536.shtml

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

相关文章

如何在 Ubuntu 20.04 桌面上启用/禁用 wayland

Wayland 是一种通信协议&#xff0c;指定显示服务器与其客户端之间的通信。 默认情况下&#xff0c;Ubuntu 20.04 桌面不会启动 Wayland&#xff0c;而是加载 Xorg 显示服务器X11。 在本教程中您将学习&#xff1a; 如何启用 Wayland如何禁用 Wayland 类别要求、约定或使用的…

【自动驾驶汽车量子群粒子过滤器】用于无人驾驶汽车列车定位的量子粒子滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

web前端项目使用electron打包成跨平台桌面端程序(Windows)

文章目录 Electron是什么&#xff1f;快速入门基本使用要求从github下载一个开源项目执行启动脚本运行项目安装electron依赖包编写electron入口文件&#xff0c;在package.json中配置入口文件路径和electron执行脚本启动electron脚本&#xff0c;运行electron应用 应用打包Wind…

1.监控分布式--zabbix

文章目录 监控分布式-zabbix、prometheus概念工作原理功能组件部署zabbix安装Nginx和PHP环境部署数据库编码安装zabbix编译安装zabbix server客户端安装zabbix agent服务 监控分布式-zabbix、prometheus 利用一个优秀的监控软件&#xff0c;我们可以: 通过一个友好的界面进行…

27. 移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

简单爬虫项目练习

爬虫项目练习 前言任务基本爬虫框架URL管理器Html 下载器HTML 解析器数据存储器爬虫调度器效果分析 前言 自学&#xff0c;参考书籍为 Python爬虫开发与项目实战 &#xff0c;具体参考了该书的第六章。过程中出现两个问题&#xff1a; 在 Pycharm 上实现时发现有些库名更改及…

计算机网络——数据链路层

文章目录 **1 数据链路层的功能****1.1 为网络层提供服务****1.2 链路管理****1.3 帧定界&#xff0c;帧同步与透明传输****1.4 流量控制****1.5 差错控制** **2 组帧****2.1 字符计数法****2.2 字符填充的首尾定界符法****2.3 零比特填充的首尾标志法****2.4 违规编码法** **3…

P5705 【深基2.例7】数字反转

题目描述 输入一个不小于 100100 且小于 10001000&#xff0c;同时包括小数点后一位的一个浮点数&#xff0c;例如 123.4123.4 &#xff0c;要求把这个数字翻转过来&#xff0c;变成 4.3214.321 并输出。 1.题目分析&#xff1a; 这道题可以从多个角度解题&#xff0c;使用字…

MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

本篇文章包含的内容 一、USCI_B——I2C主模式操作1.1 函数调用顺序说明1.2 不同情况下的函数调用顺序二、I2C通信库函数三、OLED驱动代码​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开…

Ceph 分布式存储之资源池管理

一、资源池 Pool 管理&#xff08;在admin和node三个节点都可&#xff09; 1、资源池介绍 上面我们已经完成了 Ceph 集群的部署&#xff0c;但是我们如何向 Ceph 中存储数据呢&#xff1f;首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概…

10.6.5 【Linux】分区命令: split

如果你有文件太大&#xff0c;导致一些携带式设备无法复制的问题&#xff0c;split可以将一个大文件&#xff0c;依据文件大小或行数来分区&#xff0c;可以将大文件分区成为小文件&#xff0c;快速有效。 将文件分区的话&#xff0c;使用-b size来将一个分区的文件限制其大小&…

YOLOv8的目标对象的分类,分割,跟踪和姿态估计的多任务检测实践(Netron模型可视化)

YOLOv8是目前最新版本&#xff0c;在以前YOLO版本基础上建立并加入了一些新的功能&#xff0c;以进一步提高性能和灵活性&#xff0c;是目前最先进的模型。YOLOv8旨在快速&#xff0c;准确&#xff0c;易于使用&#xff0c;使其成为广泛的目标检测和跟踪&#xff0c;实例分割&a…

模拟行走机器人-python

leetcode第874题 链接https://leetcode.cn/problems/walking-robot-simulation 机器人在一个无限大小的 XY 网格平面上行走&#xff0c;从点 (0, 0) 处开始出发&#xff0c;面向北方。该机器人可以接收以下三种类型的命令 commands &#xff1a; -2 &#xff1a;向左转 90 度…

前端晋升答辩-性能优化篇范式

本文力争为你参加晋升答辩时&#xff0c;提供一个论述性能优化相关工作的范式。简单点儿来说&#xff0c;就是按照这个范式文来准备、阐述&#xff0c;就可以博得晋升评委的认可与喜爱。 痴迷写页面UI的前端千篇一律&#xff0c;懂得量化收益的前端万里挑一。 现在已经不是刀…

C++--list简单实现

1.什么是list list是CSTL容器中的一部分&#xff0c;list是带头双向链表&#xff0c;list的作用是它可以存储数据&#xff0c;头删尾删的时间复杂度为O(1),但不支持随机访问。list与forward_list非常相似&#xff1a;最主要的不同在于forward_list是单链表&#xff0c;只能朝前…

vue2与vue3—引入echarts以及使用

安装echarts npm install echarts --save vue2中的引入与使用 main.js中 import { createApp } from vue import * as echarts from echarts //主要代码 import App from ./App.vue const app createApp(App) app.mount(#app) vue组件中 <div id"myChart"…

微信小程序音乐播放功能代码

咱就是话不多说直接上代码&#xff0c;不让亲戚老爷们苦等。 首先&#xff0c;在你的小程序页面的js文件中&#xff0c;定义音乐播放相关的数据和方法&#xff1a; Page({data: {isPlaying: false,audioContext: null},onLoad: function () {// 创建音频上下文this.setData({au…

Hadoop——大数据生态体系详解

一.大数据概论 1.1 大数据概念 大数据&#xff08;big data&#xff09;&#xff1a;指无法在一定时间范围内用常规软件工具进行捕捉、管理 和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程 优化能力的海量、高增长率和多样化的信息资产…

【无标题】使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样

问题&#xff1a;使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样&#xff0c;在mac下&#xff0c;一切正常&#xff0c;看起来很舒服&#xff0c;但是当我把页面放在扩展屏幕下&#xff08;27寸&#xff09;&#xff0c;再生成一个pdf&#xff0c;虽然排版一…

ARM Coresight 系列文章 8 - ARM Coresight 通过 APBIC 级联使用

文章目录 APBIC 回顾APBIC 级联 上篇文章&#xff1a;ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 异构 cpu 内部 coresight 组件 APBIC 回顾 APBIC 可以连接一个或者多个APB BUS masters&#xff0c; 例如连接一个 APB-AP 组件和带有 APB 接口的 Processor&…