1. 程式人生 > >Android應用程式activity啟動流程簡介

Android應用程式activity啟動流程簡介

  無論是通過點選應用程式圖示來啟動Activity,還是通過Activity內部呼叫startActivity介面來啟動新的Activity,都要藉助於應用程式框架層的ActivityManagerService服務程序。Service也是由ActivityManagerService程序來啟動的。在Android應用程式框架層中,ActivityManagerService是一個非常重要的介面,它不但負責啟動Activity和Service,還負責管理Activity和Service。

        Android應用程式框架層中的ActivityManagerService啟動Activity的過程大致如下圖所示:

         在這個圖中,ActivityManagerService和ActivityStack位於同一個程序中,而ApplicationThread和ActivityThread位於另一個程序中。其中,ActivityManagerService是負責管理Activity的生命週期的,ActivityManagerService還藉助ActivityStack是來把所有的Activity按照後進先出的順序放在一個堆疊中;對於每一個應用程式來說,都有一個ActivityThread來表示應用程式的主程序,而每一個ActivityThread都包含有一個ApplicationThread例項,它是一個Binder物件,負責和其它程序進行通訊。

        下面簡要介紹一下啟動的過程:

        Step 1. 無論是通過Launcher來啟動Activity,還是通過Activity內部呼叫startActivity介面來啟動新的Activity,都通過Binder程序間通訊進入到ActivityManagerService程序中,並且呼叫ActivityManagerService.startActivity介面; 

        Step 2. ActivityManagerService呼叫ActivityStack.startActivityMayWait來做準備要啟動的Activity的相關資訊;

        Step 3. ActivityStack通知ApplicationThread要進行Activity啟動排程了,這裡的ApplicationThread代表的是呼叫ActivityManagerService.startActivity介面的程序,對於通過點選應用程式圖示的情景來說,這個程序就是Launcher了,而對於通過在Activity內部呼叫startActivity的情景來說,這個程序就是這個Activity所在的程序了;

        Step 4. ApplicationThread不執行真正的啟動操作,它通過呼叫ActivityManagerService.activityPaused介面進入到ActivityManagerService程序中,看看是否需要建立新的程序來啟動Activity;

        Step 5. 對於通過點選應用程式圖示來啟動Activity的情景來說,ActivityManagerService在這一步中,會呼叫startProcessLocked來建立一個新的程序,而對於通過在Activity內部呼叫startActivity來啟動新的Activity來說,這一步是不需要執行的,因為新的Activity就在原來的Activity所在的程序中進行啟動;

        Step 6. ActivityManagerServic呼叫ApplicationThread.scheduleLaunchActivity介面,通知相應的程序執行啟動Activity的操作;

        Step 7. ApplicationThread把這個啟動Activity的操作轉發給ActivityThread,ActivityThread通過ClassLoader匯入相應的Activity類,然後把它啟動起來。

        這樣,Android應用程式的Activity啟動過程就簡要介紹到這裡了。

相關推薦

Android應用程式activity啟動流程簡介

  無論是通過點選應用程式圖示來啟動Activity,還是通過Activity內部呼叫startActivity介面來啟動新的Activity,都要藉助於應用程式框架層的ActivityManagerService服務程序。Service也是由ActivityManager

Android應用程式內部啟動Activity過程 startActivity 的原始碼分析

                        上文介紹了Android應用程式的啟動過程,即應用程式預設Activity的啟動過程,一般來說,這種預設Activity是在新的程序和任務中啟動的;本文將繼續分析在應用程式內部啟動非預設Activity的過程的原始碼,這種非預設Activity一般是在原來的程序

Android 元件系列 -- Activity 啟動流程(9.0)

在學習完Android應用程式啟動過程原始碼分析,針對最新Android9.0的程式碼,以相應的順序再次學習。在9.0的版本中對於Activity的啟動流程上並沒有太大的變化,但是在程式碼層面,改動的卻很多。 流程概覽 以Launcher啟動APP為例: Lau

Android應用程式程序啟動過程(前篇)

前言 在此前我講過Android系統的啟動流程,系統啟動後,我們就比較關心應用程式是如何啟動的,這一篇我們來一起學習Android7.0 應用程式程序啟動過程,需要注意的是“應用程式程序啟動過程”,而不是應用程式啟動過程。關於應用程式啟動過程,我會在後

Android應用程式啟動過程

前言 在Android系統中,Activity和Service是應用程式的核心元件,它們以鬆藕合的方式組合在一起構成了一個完整的應用程式,這得益於應用程式框架層提供了一套完整的機制來協助應用程式啟動這些Activity和Service,以及提供Binder機制幫

Android應用程式程序啟動過程(後篇)

前言 在前篇中我們講到了Android應用程式程序啟動過程,這一篇我們來講遺留的知識點:在應用程式程序建立過程中會啟動Binder執行緒池以及在應用程式程序啟動後會建立訊息迴圈。 1.Binder執行緒池啟動過程 我們首先來看RuntimeInit

[筆記]Android應用程式程序啟動過程的理解

疑問: 1.Process.fork是啥意思?類似new嗎? 2.接著1問,新APP程序和ActivityThread類是怎麼關聯起來的?是zygote程序呼叫執行的ActivityThread類的main方法,怎麼就執行在了新APP程序中? 3.UI主執行緒是啥時候建

Android程式入口ActivityThread和Android應用程式啟動流程詳解

          大家初學java時候都知道java的程式入口是從main方法進入,那麼Android是基於java編寫的,那Android的程式入口做了哪些操作呢?還有Android的應用程式到底是怎樣啟動的呢?我們一起來看一下. 首先附上ActivityThread.

Android應用程式Activity啟動過程簡要介紹和學習計劃

        在Android系統中,Activity和Service是應用程式的核心元件,它們以鬆藕合的方式組合在一起構成了一個完整的應用程式,這得益於應用程式框架層提供了一套完整的機制來協助應用程式啟動這些Activity和Service,以及提供Binder機制幫助它

Android APK打包安裝、應用程序啟動過程、Activity啟動流程

目錄 一、Android APK的構建過程 通過IDE可以生成可以在android裝置中安裝的apk檔案,Google官方提供的構建APK的過程流程圖如下: 打包APK流程總結如下: AAPT(Android Asset Packaging Tool)工

Android 如何監控當前Foreground Activity,如何獲知應用程式啟動

public class CurrentApplicationPackageRetriever { private final Context context; public CurrentApplicationPackageRetriever(Context context) {

老羅的Android之旅——Android應用程式Activity啟動過程簡要介紹和學習計劃

在Android系統中,Activity和Service是應用程式的核心元件,它們以鬆藕合的方式組合在一起構成了一個完整的應用程式,這得益於應用程式框架層提供了一套完整的機制來協助應用程式啟動這些Activity和Service,以及提供Binder機制幫助它們相

Android】原始碼分析 - Activity啟動流程

啟動Activity的方式 Activity有2種啟動的方式,一種是在Launcher介面點選應用的圖示、另一種是在應用中通過Intent進行跳轉。我們主要介紹與後者相關的啟動流程。 Intent intent = new Intent(this, TestActivity

Android Activity startActivity流程簡介

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android應用程式啟動詳解(二)從原始碼瞭解App的啟動過程

本文承接《Android應用程式啟動詳解(一)》繼續來學習應用程式的啟動的那些事。上文提到startActivity()方法啟動一個app後經過一翻過程就到了app的入口方法ActivityThread.main()。其實我們在之前的文章中《Android的訊息機制(二)之L

Android應用程式視窗(Activity)的執行上下文環境(Context)的建立過程分析

                        在前文中,我們簡要介紹了Android應用程式視窗的框架。Android應用程式視窗在執行的過程中,需要訪問一些特定的資源或者類。這些特定的資源或者類構成了Android應用程式的執行上下文環境,Android應用程式視窗可以通過一個Context介面來訪問它,

Android 外掛化分析(3)- Activity啟動流程

在真正分析外掛化技術前,我們必須瞭解一些必要的關於Android四大元件的相關知識。 以Activity為例,我們需要了解Activity啟動過程,才能有效的進行Hook實現外掛化。 以Android 8.1為例 我們啟動一個Activity通常會使用startActi

Android應用程式視窗(Activity)的檢視物件(View)的建立過程分析

       從前文可知道,每一個Activity元件都有一個關聯的Window物件,用來描述一個應用程式視窗。每一個應用程式視窗內部又包含有一個View物件,用來描述應用程式視窗的檢視。應用程式視窗檢視是真正用來實現UI內容和佈局的,也就是說,每一個Activity元件的U

Activity啟動流程原始碼分析(應用中)

在移動應用開發中,Android四大元件之一Activity是最常用的。很多介面,如:閃屏、主介面、次功能介面等都需要Activity來作為主要的載體;介面與介面之間,即不同的Activity之間也都存在跳轉切換,弄懂這其中跳轉切換原理,將有助於我們更好的理解A

Android應用程式啟動過程原始碼分析(2)

Step 9. ActivityStack.startActivityUncheckedLocked         這個函式定義在frameworks/base/services/java/com/android/server/am/ActivityStack.java檔案中: view plain pu