网站开发工具的功能有哪些,山东网站建设平台,vultr服务器做网站,深圳网站设计(深圳信科)学更好的别人#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为1623字#xff0c;预计阅读5分钟 前言 上一篇《Android Aidl跨进程通讯的简单使用》中介绍了跨进程的通讯处理#xff0c;在进程间的数据通过Aidl实现了交互#xff0c;项目中经常会遇到Bug#xff0c… 学更好的别人 做更好的自己。 ——《微卡智享》 本文长度为1623字预计阅读5分钟 前言 上一篇《Android Aidl跨进程通讯的简单使用》中介绍了跨进程的通讯处理在进程间的数据通过Aidl实现了交互项目中经常会遇到Bug往往通过异常捕获来定位问题所以这一篇我们就来看看跨进程之间的异常捕获。 实现效果 跨进程捕获异常实现 微卡智享 项目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端修改调用时捕获异常 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源码地址