日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Android 開發(fā)之漫漫長途Ⅰ—Android 系統(tǒng)的創(chuàng)世之初以及 Activity 的生命周期

 codingSmart 2021-10-22

前言

該文章是一個系列文章,是本人在 Android 開發(fā)的漫漫長途上的一點(diǎn)感想和記錄,我會盡量按照先易后難的順序進(jìn)行編寫該系列。該系列引用了《Android開發(fā)藝術(shù)探索》以及《深入理解Android 卷Ⅰ,Ⅱ》中的相關(guān)知識,另外也借鑒了其他的優(yōu)質(zhì)博客,在此向各位大神表示感謝,膜拜!??!另外,本系列文章知識可能需要有一定 Android 開發(fā)基礎(chǔ)和項(xiàng)目經(jīng)驗(yàn)的同學(xué)才能更好理解,也就是說該系列文章面向的是 Android中高級開發(fā)工程師。

新建工程

先來個最簡單的 HelloWord 代碼,用 Android Studio 3.0 新建項(xiàng)目(一直使用默認(rèn))后會自動生成一個 HelloWorld 的項(xiàng)目,如下:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
   xmlns:android="http://schemas./apk/res/android"
   xmlns:tools="http://schemas./tools"
   xmlns:app="http://schemas./apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.helloword.MainActivity">

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Hello World!"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

MainActivity.java

package com.helloword;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }
}

我們啟動應(yīng)用程序,安裝到手機(jī)或者模擬器上,界面顯示了一行字“Hello World!”。我們的激動無以言表。下面來看看 MainActivity 的生命周期——由生到死

Activity 的生命周期

典型狀態(tài)下的生命周期分析

(注:圖片來自《Android開發(fā)藝術(shù)探索》,關(guān)于各個狀態(tài)的說明以及如何測試請參看該書籍,這不是本系列的重點(diǎn))

異常狀況下的生命周期分析

(注:圖片來自《Android開發(fā)藝術(shù)探索》,關(guān)于各個狀態(tài)的說明以及如何測試請參看該書籍,這不是本系列的重點(diǎn))

Android系統(tǒng)的創(chuàng)世之初(本章重點(diǎn))

相信前面的知識只要有一些開發(fā)經(jīng)驗(yàn)的就了解。這不是本章的重點(diǎn),倘若有不太了解的同學(xué)可自行查看。那么本章重點(diǎn)來了,在 Activity 的生命周期開始之前是怎么樣的呢,Activity 的 onCreate 這個 Activity 的入口(開始)函數(shù)又是在哪里調(diào)用的呢。下面我們來看一下整個 Android 應(yīng)用程序的生母吧。

① Android 下的進(jìn)程(看清楚不是線程哦)
我們在開發(fā) Android 應(yīng)用程序的時候經(jīng)常使用到線程,那么有沒有想過進(jìn)程呢。要知道進(jìn)程才是分配資源的最小單位。我們知道 Andriod 是基于 Linux 系統(tǒng)的。所以 Linux 系統(tǒng)的啟動過程或許能給我們一些啟發(fā)。

Linux下有3個特殊的進(jìn)程,idle進(jìn)程(PID = 0), init進(jìn)程(PID = 1)和kthreadd(PID = 2),我們只介紹0,1> **idle進(jìn)程由系統(tǒng)自動創(chuàng)建, 運(yùn)行在內(nèi)核態(tài)** > idle進(jìn)程其pid=0,其前身是系統(tǒng)創(chuàng)建的第一個進(jìn)程,也是唯一一個沒有通過fork或者kernel_thread產(chǎn)生的進(jìn)程。完成加載系統(tǒng)后,演變?yōu)檫M(jìn)程調(diào)度、交換 >**init進(jìn)程由idle通過kernel_thread創(chuàng)建,在內(nèi)核空間完成初始化后, 加載init程序, 并最終用戶空間** >由0進(jìn)程創(chuàng)建,完成系統(tǒng)的初始化. 是系統(tǒng)中所有其它用戶進(jìn)程的祖先進(jìn)程 >Linux中的所有進(jìn)程都是有init進(jìn)程創(chuàng)建并運(yùn)行的。首先Linux內(nèi)核啟動,然后在用戶空間中啟動init進(jìn)程,再啟動>其他系統(tǒng)進(jìn)程。在系統(tǒng)啟動完成完成后,init將變?yōu)槭刈o(hù)進(jìn)程監(jiān)視系統(tǒng)其他進(jìn)程。 由上可知**init**進(jìn)程是Linux系統(tǒng)中所有其他用戶進(jìn)程的祖先進(jìn)程。其實(shí)它也是Android系統(tǒng)的第一個進(jìn)程。init進(jìn)程負(fù)責(zé)創(chuàng)建系統(tǒng)中的幾個關(guān)鍵進(jìn)程,其中之一的**zygote**,是Java世界的開創(chuàng)者。**zygote**進(jìn)程如何創(chuàng)建以及之后的流程我們不具體分析源碼,因?yàn)槟巧婕暗?span style="font-size: 15px;line-height: 1.5;color: rgb(163, 21, 21);">Native層,我們用一張圖來表示。

② Activity的啟動過程
前文已經(jīng)講到,zygote 分裂出嫡長子 system_server后,就通過runSelectLoopMode 等待并處理來自客戶的消息了,那么,誰會向zygote 發(fā)送消息呢?這里以一個 Activity 的啟動為例,具體分析zygote 是如何分裂和繁殖的。


ActivityManagerService 也是由 SystemServer 創(chuàng)建的。 假設(shè)通過 startActivity 來啟動一個新的 Activity,而這個 Activity 附屬于一個還未啟動的進(jìn)程,那么這個進(jìn)程該如何啟動呢?繼續(xù)上圖,結(jié)合上一張圖

Activity 的創(chuàng)建在上述的 main 函數(shù)中,具體我們就不分析了。

總結(jié)

本篇文檔主要講了 Activity 的生命周期以及 Android 創(chuàng)世之初所走的道路,總結(jié)起來就是 init 進(jìn)程創(chuàng)建了 zygote 進(jìn)程,zygote進(jìn)程 進(jìn)行了一些初始化之后便創(chuàng)建了 SystemServer 進(jìn)程,之后便 zygote進(jìn)程調(diào)用了 runSelectLoopMode() 函數(shù)等待請求,SystemServer 進(jìn)程創(chuàng)建了 Android 系統(tǒng)的服務(wù),其中ActivityManagerService(簡稱AMS)是 Android 中最核心的服務(wù),主要負(fù)責(zé)系統(tǒng)中四大組件的啟動、 切換、 調(diào)度及應(yīng)用進(jìn)程的管理和調(diào)度等工作,其職責(zé)與操作系統(tǒng)中的進(jìn)程管理和調(diào)度模塊類似。Activity 的啟動便是由 AMS 向 zygote進(jìn)程發(fā)起消息(這個說法并不精確由于 AMS 運(yùn)行在 SystemServer 進(jìn)程中,所以其本質(zhì)還是由SystemServer 進(jìn)程向 zygote 進(jìn)程發(fā)起消息)。如上圖

與之相關(guān)

源碼分析之LayoutInflater

Android Binder—APP->framework(mRemote的前世今生)

END

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多