四大组件---Service

来源:互联网 发布:网络架构师年薪 编辑:程序博客网 时间:2024/06/16 21:25
AMS中创建了很多List/Map等数据结构,这些数据结构存储了service/ApplicationThread/ServiceConn对象,这些数据结构供AMS对service进行调度,这些行为发生在service_server进程
AMS持有引用进程的ApplicationThread服务的代理,使用该对象binder call到应用进程调度service的生命周期函数
应用进程内部的binder线程向主线程发送message消息,从而达到在主线程具体执行service的生命周期函数。

从进程的角度分析bindService整个过程:
bindService这个过程设计三个进程之间的通信,分别为:发起进程client 服务进程target AMS进程
Client进程: 通过getServiceDispatcher获取Client进程的匿名Binder服务端,即LoadedApk.ServiceDispatcher.InnerConnection,该对象继承于IServiceConnection.Stub; 再通过bindService调用到system_server进程;
system_server进程: 依次通过scheduleCreateService和scheduleBindService方法, 远程调用到target进程; 4: target进程: 依次执行onCreate()和onBind()方法; 将onBind()方法的返回值IBinder(作为target进程的binder服务端)通过publishService传递到system_server进程;
system_server进程: 利用IServiceConnection代理对象向Client进程发起connected()调用, 并把target进程的onBind返回Binder对象的代理端传递到Client进程;
Client进程: 回调到onServiceConnection()方法, 该方法的第二个参数便是target进程的binder代理端. 到此便成功地拿到了target进程的代理, 可以畅通无阻地进行交互.
原创粉丝点击