久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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)用程序的時(shí)候經(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ā)表

    請遵守用戶 評論公約

    類似文章 更多