先看简单的service启动

第一种启动方式,使用startService和stopservice启动,第一次启动只会走oncreat ->onstart方法,当你再次点击startservice的时候只会走onstart方法
这种方式如果service中有方法a,方法b,那么我怎样在activity里面控制什么时候调用方法a,什么时候调用方法b呢,如果按照原本的启动方式,好像并不好实现,那么接下来看第二种启动方式


点击按钮依次调用

接下来看跨进程的aidl调用

首先设置不同进程,创建aidl文件IMyAidlInterface然后修改service

activity修改

就能完成进程间通讯啦
前提知识:java层调用binder驱动需要调用servicemanagerProxy->binderProxy->bpbinder
servicemanagerProxy里面有remote
native调用binder驱动需要调用bpservicemanage->bpbinder
然后都会调用onTransact
proxy其实就是封装binderproxy方法,然后里面的bpbind再搞
简单看下自动生成的aidl代码

proxy(obj)相当于把binderproxy(bpbinder)

客户端调用getString方法走到mremote传个标识然后会挂起。然后另一个进程service,不是会调用sub()

看ontransact方法会对code进行data打包或者reply返回。
aidl相当于你买房的中介,你想跨进程通讯的时候他把里面的办理业务都给你安排好了,你只需要花钱就行了。丢个偷来的完整流程图

网友评论