第七章 Activity组件的启动过程 - 草稿

1. 将MainAcitvity组件的Action和Category名称分别设置为"android.intent.action.MAIN"和"android.intent.category.LAUNCHER",使得它可以作为应用程序Activity的根Activity组件。

2. 在Android系统中,所有的Activity组件都保存在一个堆栈中,其中后面启动的位于前面启动的上面。用户在执行一个操作时,通常需要与一系列相关的Activity组件进行交互,这些相关的Activity组件在系统的Activity堆栈中用一个任务(Task)来描述。

3.Laucher组件启动MainAcitvity组件的过程如下所示

图片发自简书App

图片发自简书App

图片发自简书App

图片发自简书App

图片发自简书App

上传中,请稍候...

图片发自简书App

图片发自简书App


4. ActivityManagerService类有一个类型为ActivityStack的成员变量mMainStack,用来描述一个Activity组件堆栈。

5. 在ActivityManagerService中,每一个应用程序进程都使用一个ProcessRecord对象来描述,并且保存在ActivityManagerService内部。

图片发自简书App

6. ActivityStack类有三个成员变量mResumedActivity、mLastPausedActivity和mPausingActivity,它们的类型均为ActivityRecord,分别用来描述系统当前激活的Activity组件、上一次被中止的组件以及正在被中止的组件。

7. ActivityRecord类有一个成员变量app,它的类型为ProcessRecord,用来描述一个Activity组件所运行在的应用程序进程;而ProcessRecord类又有一个成员变量thread,它的类型为ApplicationThreadProxy,一个Binder代理对象,引用的是一个类型为ApplicationThread的Binder本地对象,即用代理对象来和应用程序进程进行binder通信。

8. 在ActivityManagerService中,每一个Activity组件都有一个用户ID和一个进程名称;其中,用户ID是在安装该Activity组件时由packageManagerService分配的,而进程名称则是在该Activity组件的android:process属性来决定的。ActivityManagerService在启动一个Activity组件时,首先会以它的用户ID和进程名称来检查系统中是否存在一个对应的应用程序进程。如果存在,就会直接通知这个应用程序进程将该Activity组件启动起来;否则,就会先以这个用户ID和进程名称来创建一个应用程序进程,然后再通知这个应用程序进程将该Activity启动起来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,169评论 25 709
  • 本文内容 intent是什么? Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Int...
    开发者也阅读 3,633评论 0 1
  • 风中摇曳的裙摆 斑驳的倒影 微光粼粼 好似你的眼 模糊了的记忆 已忘却你来时的样子 红色的波浪花边在空中飞舞盘旋 ...
    张娜29阅读 2,713评论 1 3
  • 非暴力沟通模式 1、诚实地表达自己,而不批评、指责 (1)观察 “当我(看、听、想到我看到的/听到的)⋯⋯” (2...
    若水柳柳柳阅读 1,126评论 0 0
  • R(阅读原文) 积极主动的涵义不仅止于采取主动,还代表人必须为自己负责。个人行为取决于自身的抉择,而非外在环境,人...
    小娇1437阅读 3,085评论 0 0

友情链接更多精彩内容