返回
揭秘安卓Activity启动流程,详尽源码剖析,一文吃透
Android
2023-12-07 09:42:02
Activity启动流程概述
当用户从Launcher中启动一个应用时,整个Activity启动流程就开始了。这个过程涉及到多个组件的协同工作,包括ActivityManagerService、WindowManagerService、Launcher、Activity和Application等。
- 用户点击应用图标 :用户点击应用图标时,Launcher会向ActivityManagerService发送一个请求,要求启动该应用。
- ActivityManagerService接收请求 :ActivityManagerService接收到请求后,会创建一个新的进程来启动应用。在这个过程中,ActivityManagerService还会创建一个新的任务栈,并把应用的第一个Activity压入任务栈顶。
- 进程创建 :当ActivityManagerService创建新的进程时,会调用zygote进程来创建该进程。zygote进程是一个特殊的进程,它专门用于创建新的进程。
- ActivityThread初始化 :在新的进程中,会创建一个ActivityThread对象。ActivityThread是Activity生命周期的管理者,它负责Activity的启动、停止、销毁等操作。
- Application对象创建 :ActivityThread会创建一个Application对象。Application对象是整个应用的入口,它负责应用的初始化工作,包括加载资源、初始化组件等。
- Activity对象创建 :ActivityThread会创建一个Activity对象。Activity对象是Activity生命周期的核心,它负责Activity的启动、停止、销毁等操作。
- Activity生命周期启动 :ActivityThread会调用Activity的onCreate()方法,标志着Activity生命周期的开始。
- Activity布局加载 :在onCreate()方法中,Activity会加载布局文件,并将布局文件中的控件添加到Activity中。
- Activity生命周期继续 :ActivityThread会继续调用Activity的onStart()和onResume()方法,标志着Activity生命周期的继续。
- 用户与Activity交互 :用户可以通过Activity中的控件与Activity进行交互,如点击按钮、输入文本等。
- Activity生命周期结束 :当用户离开Activity时,ActivityThread会调用Activity的onPause()、onStop()和onDestroy()方法,标志着Activity生命周期的结束。
源码剖析
Activity启动流程涉及的源码非常复杂,这里只列举几个关键的类和方法:
- ActivityManagerService :负责管理Activity的生命周期和进程。
- WindowManagerService :负责管理窗口的显示。
- Launcher :负责启动应用。
- Activity :Activity的基类,负责Activity的生命周期。
- Application :应用的入口,负责应用的初始化工作。
- ActivityThread :负责Activity的生命周期管理。
启动模式
Activity启动模式有四种:
- standard :标准模式,每次启动Activity都会创建一个新的实例。
- singleTop :单顶模式,如果Activity已经在任务栈顶,则不会创建新的实例,而是直接复用现有的实例。
- singleTask :单任务模式,如果Activity已经在任务栈中,则不会创建新的实例,而是将该Activity移动到任务栈顶。
- singleInstance :单例模式,整个系统中只能存在一个Activity实例。
任务栈
任务栈是Activity的容器,它记录了用户启动过的所有Activity。每个应用都有一个自己的任务栈,互不干扰。
生命周期
Activity的生命周期包括四个阶段:
- onCreate() :Activity被创建时调用。
- onStart() :Activity变得可见时调用。
- onResume() :Activity获得焦点时调用。
- onPause() :Activity失去焦点时调用。
- onStop() :Activity变得不可见时调用。
- onDestroy() :Activity被销毁时调用。
总结
Activity启动流程是安卓开发的基础,掌握Activity启动流程的原理和机制对开发者非常重要。通过本文的讲解,希望您对Activity启动流程有了更深入的理解。