子进程中,这个可以类比网络请求来理解
客户端发送请求给服务器,服务器和客户端物理上就不是同一个机器,所以显然是在两个进程中,而客户端在主线程发送请求当然会阻塞,除非请求的时候是在子线程中进行
确实是同一个模块,但是在在不同的process,一个在mainactivity 的默认包进程,一个在:remote进程,所以也是实现了跨进程的。
创建一个共享内存,发送的时候把数据存到共享内存中,接收的时候读取共享内存中的数据
首先你这是两个问题,之所以用arraylist不行,是因为arraylist只是简单根据元素是否相等去增加删除,所以由于序列化的问题前后已经不是一个对象了,那么自然删不掉,而用RemoteCallbackList可以,是因为内部使用的Ibinder来唯一标识的,所以可以删掉,而后续也是在此基础上,remote进程调用了主进程的消息接收服务。而消息类也加了in关键字,所以对象进行了写入的操作。最后主进程才打印了remote进程传的消息
虽然是异步的 但是 只是一个初始化 没有别的操作 而且是在点击事件里头来注册的 所以是不会有影响 如果害怕出现错误 可以做下null判断就好 如果需要在bindService后直接进行注册 可以在onServiceConnected回调里头进行注册
需要贴下代码 看你是怎么写的
没错,很好的课程
还行吧
6666
https://github.com/zhaozeyx/aidl.git
我的实现代码,开发语言 kotlin
Project目录结构,生产类在 /build/generated/aidl_source_output_dir/debug/compileDebugAidl/out 目录下;切换到Android目录结构,就在在java(generated)目录下
感谢支持?