用AIDL完成可跨进程通信的WebView框架

至今为止做过的项目里,H5和android的通信都是一个个方法写好,用注解标识,然后互相调用,而且还都写在同一个地方,甚至有些没把WebView放到另一个进程中去,而且方法多了,显得特别臃肿和混乱。之前写过一个可跨进程的WebView框架,经过学习之后做出了改进。虽然还有很多可优化的点,这就算先记录下来吧

框架结构图

各个类之间的关系就是这样,调用流程也差不多就是这样

使用方法

创建一个Commond指令

一个指令为一个方法,又或者你可以创建一个通用指令,再或者你可以进行封装都可以。

这里通过打开一个Activity的简单指令来介绍

  • 首先,一个指令必须继承Command并实现两个方法,CommandName执行方法(指令名称要和H5端保持一致的)

  • 其次使用 AutoService 注解去标志他属于 Command.class,方便后续查找(AutoService可通过自定义注解替代)

  • 参数callback属于AIDL文件,如果有数据回调可以使用,没有可以不用管

执行一个指令

指令在android端创建,接着等着H5端来调用我们的方法

  • 如下,H5端想调用上面创建的指令,只需要在方法中,传入指令名称'openActivity'和message参数,android端就可以在本地指令集中找到对应指令,并根据message执行相应操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AIDLAndroid Interface Definition Language)是一种Android特有的IPC(Inter-Process Communication,进程间通信)机制,可以实现进程通信。以下是使用AIDL实现进程通信的步骤: 1. 定义AIDL接口:在AIDL文件中定义接口和方法,这些接口和方法将在不同进程之间进行调用。例如,定义一个接口IStudentManager和一个方法addStudent()。 2. 实现AIDL接口:在Service中实现AIDL接口,可以在Service中创建一个Binder对象,然后将该对象返回给客户端,客户端可以使用这个Binder对象调用Service中的方法。 3. 绑定Service:在客户端中绑定Service,通过这种方式,客户端可以获取到Service中的Binder对象,然后调用Service中的方法。 4. 调用方法:在客户端中通过Binder对象调用Service中的方法,实现进程通信。 注意事项: 1. 在使用AIDL时,需要在AndroidManifest.xml文件中注册Service。 2. AIDL接口中只能使用基本数据类型和Parcelable类型,不支持其他类型。 3. AIDL接口中定义的方法必须是线程安全的,因为它们可能在不同进程中被调用。 4. AIDL接口中定义的方法必须是只读的,不应该修改传入的参数。 5. AIDL接口中的方法返回值必须是void或者基本数据类型、String、CharSequence、Parcelable类型。 6. AIDL接口中的方法可以抛出RemoteException异常,因为AIDL接口是基于Binder实现的,所以需要处理Binder连接中断的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值