美文网首页
Activity(下)- 启动过程模式略解

Activity(下)- 启动过程模式略解

作者: Lonie233 | 来源:发表于2017-03-09 23:41 被阅读15次

    前面讲了一些基本的activity知识,对于应用层的开发人员来说,我感觉是够用了,但是作为一个年轻人,还是要有点探索精神的,所以我写了这一节,试着从安卓底层描述一下activity的具体启动过程。首先附上参考资料,本人也是刚工作半年多的菜鸟,经验有限。
    参考资料一 Android应用程序的Activity启动过程简要介绍和学习计划
    参考资料二 Android M 5.0,关于ActivityThread和ApplicationThread的解析.
    首先上一张图

    转自资料 图 1.1

    这四个类(接口),暂时不需要知道是干嘛用的,先来描述一下他的启动过程。
    ActivityManagerService(以下称为AMS)和ActivityStack 处于同一进程中,而ApplicationThread和ActivityThread处于另一个进程,对于任何应用来说,ActivityThread标会应用的主进程,而每一个ActivityThread都包含一ApplicationThread实例。对于这两个类,我从资料二得到的信息一就是activityThread持有ApplicationThread,ApplicationThread负责AMS 和ActivityThread 之间的通信。而且ApplicationThread是ActivityThread的内部类,继承自binder,实现了IApplicationThread接口。

    写不下去了啊,附上大神链接
    【凯子哥带你学Framework】Activity启动过程全解析
    --------------------还是要写的,简要描述下吧----------------------------------------------------------

    1. 无论是通过launcher启动,还是通过内部activity启动新的activity,首先都会通过Binder进程间通信进入到ActivityManagerService进程,并且调用activityManagerService,startActivity接口
      2.AMS调用ActivityStack.startActivityMyWait 做准备工作

    3 ActivityStack 通知applicationThread要进行启动调度,,这里了applicationThread代表的是AMS进程,,点击Launcher就是Launcher进程,activity内部就是发起调用的activity坐在进程。

    4.ApplicationThread不执行真正的启动操作,他通过调用AMS.activityonPause接口进入到AMS进程,看看是否需要创建新进程。

    5.对于点击Launcher来说,AMS 会调用startProcessLocked 创建新进程,对于activity内部来说,则不需要,新的activity会在发起的activity所在进程创建。

    1. AMS 调用ApplicationThr.scheduleLaunchActivity 接口,通知相应进程开始后续操作。

    2. ApplicationThread把启动Activity的操作转发给ActivityThread,ActivityThread通过ClassLoader导入相应的Activity类,然后真正启动
      `

    相关文章

      网友评论

          本文标题:Activity(下)- 启动过程模式略解

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