zoukankan      html  css  js  c++  java
  • Activity的启动流程

    前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity

    其实两种情况殊途同归,最后都是调用的相同方法。下面我们主要总结一下第一种情况。

    引用 https://blog.csdn.net/qian520ao/article/details/78156214 中的整体流程如下:

    1. Launcher通知AMS启动淘宝APP的MainActivity,也就是清单文件设置启动的Activity。
    2. AMS记录要启动的Activity信息,并且通知Launcher进入pause状态。
    3. Launcher进入pause状态后,通知AMS已经paused了,可以启动淘宝了。
    4. 淘宝app未开启过,所以AMS启动新的进程,并且在新进程中创建ActivityThread对象,执行其中的main函数方法。
    5. 淘宝app主线程启动完毕后通知AMS,并传入applicationThread以便通讯。
    6. AMS通知淘宝绑定Application并启动MainActivity。
    7. 淘宝启动MainActivitiy,并且创建和关联Context,最后调用onCreate方法。

      

        AMS是独立于Launcher和app进程的,因此他们之间的沟通是通过Binder来实现的,我们通过context.getSystemServer()可以获取到AMS的服务代理,但是只能从app发送消息到AMS,如果AMS想要通知app,就要使用applicationThread这个binder对象了,applicationThread的绑定是在ActivityThread的main方法中进行的。

      Launcher通过amp来通知AMS启动一个新的activity,这个新的activity对象就保存在AMS中这端,如果新的app还没有启动进程,ams就会调用zygote copy一个进程出来,并且在这个进程中调用ActivityThread.main()方法来启动一个主线程,在main中,会绑定一个applicationThread的binder对象,之后AMS会通过applicationThread来通知activityThread来启动activity,在ActivityThread中又会调用H来发送消息,最后会回调到instrumentation(仪表盘)中来进行activity的创建,onCreate等生命周期等。

     

  • 相关阅读:
    iOS 10 的杂碎资料
    MAC SVN Merge 操作
    iOS中AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
    从字符串中获取指定字符内的内容
    判断是否是是全汉字、全字母、全数字、数字和字母等
    解析URL 获取某一个参数值
    长按TextField或TextView显示中文的粘贴复制
    TextField和TextView的限制输入长度
    抢购、距活动结束,剩余时间倒计时。
    Cell右滑 多个编辑选项栏
  • 原文地址:https://www.cnblogs.com/sharkchao/p/10272136.html
Copyright © 2011-2022 走看看