前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android Aidl跨进程通讯(二)--异常捕获处理

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

作者头像
Vaccae
发布2023-09-11 15:48:35
3460
发布2023-09-11 15:48:35
举报
文章被收录于专栏:微卡智享微卡智享

学更好的别人,

做更好的自己。

——《微卡智享》

实现效果

跨进程捕获异常实现

微卡智享

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

在aidl中使用了数据类TestData,所以Aidl文件和数据类的文件必须保证在同一包名下,并不是说放在同一文件夹下,实体类TestData文件在主Code文件夹下(java目录下),包名和aidl文件夹中放置.aidl文件的包名一致。保证这样后再重新Rebuild就不会报错了。 Vaccae,公众号:微卡智享Android Aidl跨进程通讯的简单使用

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

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

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

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

代码语言:javascript
复制
        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日志

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

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

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

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

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

结论

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

#

跨进程传递异常类型

1

SecurityException

2

BadParcelableException

3

IllegalArgumentException

4

NullPointerException

5

IllegalStateExceptio‍

6

NetworkOnMainThreadExceptio

7

UnsupportedOperationException

8

ServiceSpecificException

往期精彩回顾

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档