美文网首页
第9章 四大组件的工作过程

第9章 四大组件的工作过程

作者: SunnyGL | 来源:发表于2020-05-08 23:46 被阅读0次

    Activity 的工作过程

    Activity.startActivity
    -> Activity.startActivityForResult
    -> Instrumentation.execStartActivity(参数 ApplicationThread,为 ActivityThread 的一个内部类)
    -> ActivityManagerNative.startActivity(ActivityManagerNative 为 AMS 远程代理类)
    -> AMS.startActivity(IPC)
    -> AMS.startActivityAsUser
    -> ActivityStackSupervisor.startActivityMayWait
    -> ActivityStackSupervisor.startActivityLocked
    -> ActivityStackSupervisor.startActivityUncheckedLocked
    -> ActivityStack.resumeTopActivitiesLocked
    -> ActivityStack.resumeTopActivityInnerLocked
    -> ActivityStackSupervisor.startSpecificActivityLocked
    -> ActivityStackSupervisor.realStartActivityLocked
    -> IApplicationThread.scheduleLaunchActivity(IApplicationThread 为 ApplicationThread 远程代理类)
    -> ApplicationThread.scheduleLaunchActivity(IPC)
    -> ApplicationThread.sendMessage(发送一个消息到 H,H 为 Handler)
    -> ActivityThread.handleLaunchActivity
    -> ActivityThread.performLaunchActivity(1.从 ActivityClientRecord 中获取待启动的 Activity 的组件信息 2.通过 Instrumentation 的 newActivity 方法使用类加载器创建 Activity 对象 3.通过 LoadedApk 的 makeApplication 方法来尝试创建 Application 对象 4. 创建 ContextImpl 对象并通过 Activity 的 attach 方法来完成一些重要数据的初始化 5. 调用 Activity 的 onCreate 方法
    -> ActivityThread.handleResumeActivity(调用 Activity 的 onResume 方法)


    Activity 的工作过程.png

    Service 的工作过程

    Service 的启动过程

    ContextWrapper.startService
    -> ContextImpl.startService
    -> ContextImpl.startServiceCommon
    -> ActivityManagerNative.startService(ActivityManagerNative 为 AMS 远程代理类)
    -> AMS.startService(IPC)
    -> ActiveServices.startServiceLocked(ActiveServices 是一个辅助 AMS 进行 Service 管理的 类)
    -> ActiveServices.startServiceInnerLocked
    -> ActiveServices.bringUpServiceLocked
    -> ActiveServices.realStartServiceLocked

    -> IApplicationThread.scheduleCreateService(IApplicationThread 为 ApplicationThread 远程代理类)
    -> ApplicationThread.scheduleCreateService(IPC)
    -> ActivityThread.sendMessage(发送一个消息到 H,H 为 Handler)
    -> ActivityThread.handleCreateService(1.通过类加载器创建 Service 的实例 2.创建 Application对象 3.创建
    ContentImpl 对象并通过 Service 的 attach 方法建立二者之间的关系 4.调用 Service 的 onCreate 方法并将 Service 对象存储到 ActivityThread 中的 mServices 列表中)

    -> ActiveServices.sendServiceArgsLocked
    -> IApplicationThread.scheduleServiceArgs(IApplicationThread 为 ApplicationThread 远程代理类)
    -> ApplicationThread.scheduleServiceArgs(IPC)
    -> ActivityThread.sendMessage(发送一个消息到 H,H 为 Handler)
    -> ActivityThread.handleServiceArgs(调用 Service 的 onStartCommand 方法)


    Service 的启动过程.png
    Service 的绑定过程

    ContextWrapper.bindService
    -> ContextImpl.bindServiceCommon(将客户端的 ServiceConnection 对象转化为ServiceDispatcher.InnerConnection 对象,在 ServiceDispatcher 内部会建立 ServiceConnection 和 InnerConnection 的对应关系)
    -> ActivityManagerNative.bindService
    -> AMS.bindService.bindService(IPC)
    -> ActiveServices.bindServiceLocked

    -> ActiveServices.bringUpServiceLocked
    -> ActiveServices.realStartServiceLocked(此后过程和 Service 的启动过程一致)

    -> ActiveServices.requestServiceBindingLocked
    -> IApplicationThread.scheduleBindService
    -> ApplicationThread.scheduleBindService(IPC)

        -> ActivityThread.handleBindService(1.根据 Service 的 token 取出 Service 对象,然后调用 Service 的 onBind 方法 )

        -> ActivityManagerNative.publishService
        -> AMS.publishService(IPC)
        -> ActiveServices.publishServiceLocked
        -> IServiceConnection.connected
        -> LoadedApk.ServiceDispatcher.InnerConnection.connected(IPC)
        -> LoadedApk.ServiceDispatcher.connected(将 RunConnection 通过 Handler post 到主线程中执行)
        -> LoadedApk.ServiceDispatcher.RunConnection.run
        -> ServiceDispatcher.doConnected
        -> ServiceConnection.onServiceConnected


    Service 的绑定过程.png

    相关文章

      网友评论

          本文标题:第9章 四大组件的工作过程

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