Android Aidl跨进程通讯(二)--异常捕获处理

学更好的别人,

做更好的自己。

——《微卡智享》

b05f933ce04b28ec3c563c5f6adc2eea.jpeg

本文长度为1623,预计阅读5分钟

前言

上一篇《Android Aidl跨进程通讯的简单使用》中介绍了跨进程的通讯处理,在进程间的数据通过Aidl实现了交互,项目中经常会遇到Bug,往往通过异常捕获来定位问题,所以这一篇我们就来看看跨进程之间的异常捕获。

53e11fca21890b22cdf0f9aab6add7fd.png

实现效果

521316c4ff2cb3ae4906e786567de5c5.gif

62c008463679b297cceaed9f193e809c.jpeg

跨进程捕获异常实现

a7c1fb742781c66a2c74806c42ed5b04.png

微卡智享

项目Demo还是用上一篇中的Demo,文中曾提到过创建AIDL文件和数据类后,需要ReBuild一下

在aidl中使用了数据类TestData,所以Aidl文件和数据类的文件必须保证在同一包名下,并不是说放在同一文件夹下,实体类TestData文件在主Code文件夹下(java目录下),包名和aidl文件夹中放置.aidl文件的包名一致。保证这样后再重新Rebuild就不会报错了。

Vaccae,公众号:微卡智享Android Aidl跨进程通讯的简单使用

通过Build生成的ITestDataAidlInterface JAVA类,如下图

16928330c49fd45eaa183eb7caf2ce27.png

98cd48d1490f8db80ecc5e414dc1fcd6.png

然后在该类中可以看到定义的三个方法,后面都带有throws android.os.RemoteException的抛异常处理,那就用其中getTestData这个方案来进行抛异常的处理。

直接在Demo中的AidlService中修改这个方法的实现,如下图:

c2774c0908289b755de5e39864ba7a96.png

然后在Client端修改调用时捕获异常

44c6fbed2905c864060bd77f22608873.png

binding.btngetdata.setOnClickListener { view ->try {AidlProcessUtil.getAidlService()?.getTestData("00001")?.let { p ->val msg = "编码${p.code} 名称:${p.name} 价格:${p.price} 数量:${p.qty}"Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show()}} catch (e: Exception) {Snackbar.make(view, e.message.toString(), Snackbar.LENGTH_LONG).show()}}

运行程序后发现点击按钮并没有Snake的弹窗提醒,程序也没有崩溃,那就来看看Log日志

72a5ca6e632abb970652cc6b7ce039e4.png

日志中可以看到,有异常输出记录,Uncaught remote exception!  (Exceptions are not yet supported across processes.),竟然写的是进程之间不支持异常。

那从ITestDataAidlInterface查看一下,可以看到reply中有writeException,那我们下一个源码看看Parcel中是怎么实现的

f6756908333dd5675d178d7b26168abb.png

定位到Parcel中的writeException,在里面再找到getExceptionCode

29a5c60d541058306d08a67feda76aaa.png

8d27bd8834cd2e402b4a7150a1f7aef8.png

在这里面看到的Exception中的类型,并没有RemoteException,看到这大概就明白了,那我们修改一下抛出异常的类型,改为上面第一个异常类型SecurityException

a0fbeb0e22d4ef4dee05c36ee32527aa.png

Client客户端异常捕获不用改,重新运行后,发现可以捕获到异常了。

结论

跨进程通讯中,从一端到另外一端,支持传递以下异常类型如下:

#跨进程传递异常类型
1
SecurityException
2
BadParcelableException
3
IllegalArgumentException
4
NullPointerException
5
IllegalStateExceptio‍
6
NetworkOnMainThreadExceptio
7
UnsupportedOperationException
8
ServiceSpecificException

63d7cf091ad24b06db60f6e696e9d7ec.png

21237d698d8f56532f6d5dac908820a8.png

往期精彩回顾

 

73b1727be0547325e77a872a1f6f2be7.jpeg

Android Aidl跨进程通讯的简单使用

 

 

c310dbb24cb4fd7690216183b810619f.jpeg

Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

 

 

155ce3faef2c636d4920fa1952aa5aff.jpeg

Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)

 

 

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

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

相关文章

RabbitMQ工作模式-工作队列

官网关于工作模式的解释地址:https://www.rabbitmq.com/getstarted.html Work Queue(工作队列) 生产者发消息,启动多个消费者来消费消息,每个消费者仅消费部分消息,可达到负载均衡的效果。 创建生产者 i…

【数据结构】树和二叉树的概念及结构(一)

目录 一,树的概念及结构 1,树的定义 2,树结点的分类及关系 3,树的表示 二,二叉树的概念及结构 1,二叉树的定义 2,特殊的二叉树 3,二叉树的性质 4,二叉树的存储结构 1&…

微软表示Visual Studio的IDE即日起开启“退休”倒计时

据了解,日前有消息透露称,适用于 Mac平台的Visual Studio集成开发环境(IDE)于8月31日启动“退休”进程。 而这意味着Visual Studio for Mac 17.6将继续支持12个月,一直到2024年8月31日。    微软表示后续不再为Visual Studio for Mac开发…

数据库备份

数据库备份,数据库为school,素材如下 1.创建student和score表 目录 数据库备份,数据库为school,素材如下 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带…

简易虚拟培训系统-UI控件的应用3

目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…

Grafana之魔法:揭秘数据可视化的艺术

在数据驱动的时代,如何有效地呈现和理解数据成为了每个组织和个人的核心任务。Grafana作为一个领先的开源数据可视化工具,为我们提供了强大的功能和灵活性。本文将深入探讨Grafana的魔法,以及它如何帮助我们更好地理解数据。 Grafana简介 G…

springboot添加ssl证书文件后报错:DerInputStream.getLength(): lengthTag=111, too big.

1、添加证书文件 springboot添加SSL证书&#xff0c;支持https与http 按照上述连接中的方法添加证书文件后&#xff0c;启动报错&#xff1a;DerInputStream.getLength(): lengthTag111, too big. 2、解决办法 在pom.xml中添加配置 再次启动解决问题 <plugin><arti…

LLMs之Code:SQLCoder的简介、安装、使用方法之详细攻略

LLMs之Code&#xff1a;SQLCoder的简介、安装、使用方法之详细攻略 目录 SQLCoder的简介 1、结果 2、按问题类别的结果 SQLCoder的安装 1、硬件要求 2、下载模型权重 3、使用SQLCoder 4、Colab中运行SQLCoder 第一步&#xff0c;配置环境 第二步&#xff0c;测试 第…

Vue2023 面试归纳及复习

目录 1. Vue 3中的Composition API&#xff08;Hooks&#xff09;是什么&#xff1f;它与Options API有何不同&#xff1f; Composition API 的优势 2 Options API 语法格式 3 setup 语法糖 4 Vue3的生命周期 5. 请解释一下Vue 3中的Teleport&#xff08;传送&#xf…

[Linux]套接字通信

摘于https://subingwen.cn,作者:苏丙榅 侵删 文章目录 1. 套接字-socket1.1 概念1.2 网络协议1.3 socket编程1.3.1 字节序1.3.2 IP地址转换1.3.3 sockaddr 数据结构1.3.4 套接字函数 1.4 TCP通信流程1.4.1 服务器端通信流程1.4.2 客户端的通信流程 1.5 扩展阅读1.5.1 初始化套…

黑马 软件测试从0到1 常用分类 模型 流程 用例

课程内容&#xff1a; 1、软件测试基础 2、测试设计 3、缺陷管理 4、Web常用标签 5、项目实战 以终为始&#xff0c;由交付实战目标为终&#xff0c;推出所学知识&#xff1b;从认识软件及软件测试&#xff0c;到如何设计测试、缺陷标准及缺陷管理&#xff0c;最终以项目实战贯…

dockerfile 例子(二)

Dockerfile由一行一行的命令语句组成&#xff0c;#开头的为注释行。Dockerfile文件内容分为四个部分&#xff1a;基础镜像信息、维护者信息、镜像操作指令以及容器启动执行指令。 接下来给大家列出Dockerfile中主要命令的说明。 FROM&#xff0c;指定所创建镜像的基础镜像。 …

汽车电子笔记之:基于AUTOSAR的电机控制器架构设计

目录 1、概述 2、AUTOSAR设计 2.1、SWC设计 2.2、PORT设计 2.3、Runnable设计 2.4、电机控制器OS实现 1、概述 电机控制器应用层的软件架构较为复杂,主要包括PMSM(Permanent-MagnetSynchronous Motor)的矢量控制算法。根据PMSM的控制算法,对算法中的软件功能进行分析&…

java反编译工具jd-gui使用

文章目录 一、JD-GUI介绍二、下载三、安装四、使用教程五、免责声明摘抄 一、JD-GUI介绍 JD-GUI是一个独立的图形实用程序&#xff0c;显示“.class”文件的Java源代码。 使用JD-GUI浏览重构的源代码&#xff0c;以便即时访问方法和字段。 二、下载 MAC安装包&#xff1a;ht…

leetcode410. 分割数组的最大值(java)

分割数组的最大值 题目描述二分法代码演示 题目描述 难度 - 困难 410. 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m &#xff0c;你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1&#xff1a; 输入&…

Pyecharts数据可视化(二)

目录 1.绘制散点图 2.绘制饼图 2.1绘制实心饼图 2.2 绘制圆形饼图 2.3 绘制玫瑰图 3.绘制漏斗图 4.绘制仪表盘 5.绘制组合图表 本文主要介绍如何利用Pyecharts来绘制一些常用的可视化图形&#xff0c;比如散点图、饼图、漏斗图等等&#xff0c;具体的绘制方法请见下文。 …

jQuery成功之路——jQuery的DOM操作简单易懂

jQuery的DOM操作 1.jQuery操作内容 jQuery操作内容 1. text() 获取或修改文本内容 类似于 dom.innerText 2. html() 获取或修改html内容 类似 dom.innerHTML 注意: 1. text() 是获取设置所有 2. html() 是获取第一个,设置所有 <!DOCTYPE html> <html lang"zh…

Unity 状态机

Enemy状态以及切换图 程序架构 接口 public interface IState {void OnEnter(); //进入状态时void OnUpdate();//执行状态时void OnExit(); //退出状态时 }接口实现及状态切换类 public class IdleState : IState {private FSM manager;private Parameter parameter;public…

LiteOS qemu realview-pbx-a9 环境搭建与运行

前言 最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境&#xff0c;当前 RT-Thread、FreeRTOS 已经成功运行 qemu&#xff0c;LiteOS 初步验证可以正常 运行 qemu realview-pbx-a9&#xff0c;这里做个记录 首先学习或者研究 RTOS&#xff0c;只是看内核源码&#xff0…

TiDB x 安能物流丨打造一栈式物流数据平台

作者&#xff1a;李家林 安能物流数据库团队负责人 本文以安能物流作为案例&#xff0c;探讨了在数字化转型中&#xff0c;企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。 安能物流作为中国领先的综合型物流集团&#xff0c;需要应对大规模的业务流程&#xff…