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

news2024/10/7 20:31:52

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
	@Override
	public IBinder onBind(Intent intent) {
		Log.d("TAG", "onBind: " + intent);
		return mBinder.asBinder();
	}

	@Override
	public void onCreate() {
		super.onCreate();
		Log.d("TAG", "onCreate: ");
		mBinder = new Binder();
	}

	private class Binder extends IAidlInterface.Stub{

		private static final String TAG = "mBinder";
		@Override
		public 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;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = findViewById(R.id.name);

	//	bindService();

		mServiceConn = new ServiceConnection() {
			@Override
			public 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: ");
			}
			@Override
			public 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);
		}

	@Override
	public 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);

	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		unbindService(mServiceConn);
	}
}

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

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

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

相关文章

【Docker】了解和使用Docker

文章底部有投票活动&#xff0c;赶快参与进来吧&#x1f603; 相信大家在开发过程中都听说过 Docker 一词&#xff0c;至于 Docker 在开发中扮演的角色&#xff0c;估计好多人都说不上来&#xff0c;今天就让阿Q带大家一起揭开它神秘的面纱&#xff01; 文章目录 什么是容器&a…

SQL对决MySQL全面对比:差异、相似性、用途和优点!

SQL和MySQL被用于编程和管理关系型数据库。了解SQL和MySQL之间的主要区别&#xff0c;以及在使用这些数据库管理工具的工作中所需的技能。 SQL和MySQL是与数据库相关的语言。SQL是一种用于与关系型数据库中的数据交互的编程语言&#xff0c;而MySQL是一种实现SQL标准的开源数…

Android平台下的cpu利用率优化实现

背景 为了进一步优化APP性能&#xff0c;最近针对如何提高应用对CPU的资源使用、以及在多线程环境下如何提高关键线程的执行优先级做了技术调研。本文是对技术调研过程的阶段性总结&#xff0c;将分别介绍普通应用如何调控App频率、如何将指定线程绑定到特定CPU、如何通过提升…

迅为龙芯2K0500开发板-资料目录

基础资料 01 开发板硬件资料 02_开发及烧写工具 开发资料 03开发所需软件及驱动 04_pmon&Linux内核源码 05_内核镜像 06_pmon镜像 07_buildroot文件系统源码&镜像 08_测试文件 使用手册 01[北京迅为]iTOP-LS2K0500开发板快速启动手册_v1.0 02[北京迅为]iTOP-LS2K0500开…

抖音小程序开发常见问题

抖音小程序 问题1 抖音小程序调试预留白屏 解决 &#xff0c;连接wifi出现无法打开&#xff0c;用手机流量可以正常访问 抖音小程序 web-view 上传后白屏 抖音小程序使用 webview 白屏&#xff0c;使用web-vew打开h5页面白屏 解决&#xff1a;配置web-view域名 服务器域名配…

mysql获取上月月份

查看上个月数据 SELECT * FROM table WHERE date_format(time, %Y %m) date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),%Y %m)查询上个月 select date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH), %m)行转列 – 行转列&#xff1a;方法① SELECT id, name, GROU…

申请阿里云服务器并搭建公网可支持数据上传下载的HTTP服务器

1. 前言 拥有一台自己的云服务器可以做很多事情。阿里云服务器毫无疑问是国内最好的。 阿里云服务器可以用于各种互联网应用的搭建和运行&#xff0c;提供稳定、高性能的服务。 阿里云服务器的用途&#xff0c;包括但不限于以下几个方面&#xff1a; 网站托管&#xff1a;可以将…

比较好用的洗地机品牌有哪些?家用洗地机推荐

近两年洗地机可谓是大热门清洁家电&#xff0c;源于它在清洁使用上面&#xff0c;不仅效率高过于传统清洁工具&#xff0c;同时在清洁地面的时候&#xff0c;干湿垃圾同步清洁&#xff0c;完全不需要手动清洁&#xff0c;使用体验非常棒&#xff01;那关于洗地机该如何挑选才能…

【Java】练手小项目|用Java实现一个简单的图书管理系统

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 文章目录 一、项目简介&#xff08;流程图&#xff09;二、设计思路&#xff08;UML图&#xff09;三、代码四、总结&反思&#xff1a; 一、项目…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 18 日论文合集)

文章目录 一、检测相关(19篇)1.1 Implementation of a perception system for autonomous vehicles using a detection-segmentation network in SoC FPGA1.2 Monocular 3D Object Detection with LiDAR Guided Semi Supervised Active Learning1.3 Active Learning for Object…

亚马逊在人工智能领域的投资机会

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 亚马逊股票的关键指标 猛兽财经认为亚马逊&#xff08;AMZN&#xff09;在拥抱生成式人工智能方面是非常认真的&#xff0c;以下指标就证明了这一点。 上周&#xff0c;亚马逊透露&#xff0c;它已经建立了“AWS生成人工智…

uniapp中axios封装和环境配置

axios版本 最好锁定版本&#xff0c;避免bug axios-miniprogram-adapter这个依赖主要是适配小程序网络请求的适配器&#xff0c;为了解决uniapp 适配axios请求&#xff0c;避免报adapter is not a function错误 cnpm i axios0.26.0 axios-miniprogram-adapter 配置adapter函…

leaflet 沿河流流向显示河流名字

1.效果图&#xff1a; 2.代码块 首先需要借助一个插件3mapslab-Leaflet.streetlabels&#xff08;这个插件也可用于显示街道名字用的&#xff09; 插件可在leaflet官网上下载及案例&#xff01; --- layout: default ---<div idmap style"width:100%;min-height:30…

2023年,做好数据分析项目,四分之三就靠它了

摘要 在2023年&#xff0c;数据分析成为了一个卓越的商业实践&#xff0c;为企业和组织带来了巨大的成功。本文将深入探讨一个重要数据分析项目&#xff0c;其成功的四分之三依赖于数据洞察力的重要性。通过合理的数据收集、清洗、分析和解释&#xff0c;企业能够获得实质性的见…

关于生物数据库定制研发-开发注意事项

目前需要定制开发一款核酸数据库、蛋白数据库、蛋白结构数据库或是通路数据库等生物医药数据库成本无疑是巨大的&#xff01;需要承受生物数据获取成本、开发成本、专业人才挖掘、行业壁垒攻克、研发及运维等碎片化难题&#xff0c;所以找到一家实力强劲专业公司是很有必要的。…

fastadmin采坑之关联id

在add.html中添加 尤其要注意 data-field属性这个是最重要的&#xff0c;不然搜索不出来 <div class"form-group"><label class"required control-label col-xs-12 col-sm-2">{:__(Meeting_id)}:</label><div class"col-xs-12…

nosql作业

nosql作业 文章目录 作业一&#xff1a;string list hash结构中&#xff0c;每个至少完成5个命令&#xff0c;包含插入 修改 删除 查询&#xff0c;list 和hash还需要增加遍历的操作命令1、 string类型数据的命令操作&#xff1a;2、 list类型数据的命令操作&#xff1a;3、 ha…

计算机专升本基础笔记二 进制转换及二进制运算规则

进制转换及二进制运算规则 什么是进制&#xff1f;     进制就是进位计数制&#xff0c;是人为定义的带进位的计数方法。我们的时间就是六十进制(满60秒进一分钟&#xff0c;满60分钟进1小时&#xff09;&#xff1b;对于任何一种进制—X进制&#xff0c;就表示每一位上的数…

网络子系统学习2:套接字缓冲区

套接字缓冲区 目录 套接字缓冲区 套接字缓冲区整体结构 使用套接字缓冲区管理数据 管理套接字缓冲区数据 套接字缓冲区整体结构 在内核分析&#xff08;收到的&#xff09;网络分组时&#xff0c;底层协议的数据将传递到更高的层。发送数据时顺序相反&#xff0c;各种协议…