• Service的启动、绑定过程


    --摘自《Android进阶解密》

    *Service启动过程*

    第一步:ContextImpl到ActivityManagerService的调用过程

    第二步:ActivityThread启动Service

    1)ProcessRecord主要用来描述运行的应用程序进程的信息

    2)LoadedApk是一个APK文件的描述类

    *Service绑定过程*

    第一步:ContextImpl到AMS的调用过程

    第二步:Service的绑定过程

    1)几个与Service相关的对象类型

      * ServiceRecord  用于描述一个Service

      * ProcessRecord  一个进程的信息

      * ConnectionRecord  用于描述应用程序进程和Service建立的一次通信

      * AppBindRecord  应用程序进程通过Intent绑定Service时,会通过AppBindRecord来维护Service与应用程序进程之间的关联。其内部存储了谁绑定的Service(ProcessRecord)、谁绑定的Service(AppBindRecord)、绑定Service的Intent(IntentBindRecord)和所有绑定通信记录的信息(ArraySet<ConnectionRecord>)

      * IntentRecord  用于描述绑定Service的Intent

    2)bindService方法内部会启动Service

    3)ServiceDispatcher是LoadedApk的内部类,InnerConnection的connected方法内部会调用H的post方法向主线程发送消息,并且解决当前应用程序进程和Service跨进程通信的问题

    1)IServiceConnection,它是ServiceConnection在本地的代理,用于解决当前应用程序进程和Service跨进程通信的问题,具体实现为ServiceDispatcher.InnerConnection

    欢迎关注我的微信公众号:安卓圈

  • 相关阅读:
    SaltStack(六) 案例练习
    SaltStack(五) SaltStack与ZeroMQ
    SaltStack(四) 配置管理
    SaltStack(三) 远程执行
    js 阳历、阴历互转
    把一个服务器的数据库导入到另一台服务器中
    vue项目 px自动转vw
    oracle创建自增序列和触发器
    svn 无法clean up的解决方案
    vue 后台获取路由表,addRouters动态路由
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/10176409.html
Copyright © 2020-2023  润新知