Binder略

作者: 土豆泥加冰谢谢 | 来源:发表于2020-12-03 18:05 被阅读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)

    相关文章

      网友评论

          本文标题:Binder略

          本文链接:https://www.haomeiwen.com/subject/jutvwktx.html