Binder略

2020-12-03  本文已影响0人  土豆泥加冰谢谢

AMS:SystemServer进程的BBinder

C端首先获取amsBpBinder(这一步是通过驱动和sevice_manager进程通讯)

C端创建ServiceConnection(JavaBBinderHolder):sc
amsBpBinder.transact(intent,sc)
->writeStrongObject时将BBinderHolder创建为BBinder

通过ioctl和驱动通信

进入amsBBinder onTransaction
readStrongObject过程中创建持有了scBpBinder
AMS处理逻辑,比如检查Service进程有没有启动,找到对应Service等等,以及获取到S的activityThreadBpinder(通过和驱动以及service_manager进程通信,这个过程中S创建了activityThreadBBinder)

activityThreadBpinder.transact(intent)

通过驱动进入sBBinder.onTransaction->
进行业务处理,读取intent,调用onBind(intent),创建了S端的业务JavaBBinderHolder

接着S端通过amsBpBinder.transact(sJavaBBinderHolder)
同样通过write生成了sBBinder

走驱动->amsBBinder.onTransact()
同样通过read获取了sBpBinder

接着amsBBinder通过之前获取到的scBpBinder.connected(sBpBinder)
->scBpBinder.transact()
->走驱动回传回了C进程
c进程通过onTransact,read创建了属于自己的sBpBinder
调用connected(sBpBinder)

上一篇下一篇

猜你喜欢

热点阅读