Android」四大組件之Activity,你真的都掌握了?

Android」四大組件之Activity,你真的都掌握了?

一、 Activity


  • 提供一個界面讓用戶點擊和各種滑動操作
Android」四大組件之Activity,你真的都掌握了?

1.1 生命週期

  • 啟動Activity: onCreate()--->onStart()--->onResume(),Activity進入運行狀態。
  • Activity退居後臺: 當前Activity轉到新的Activity界面或按Home鍵回到主屏: onPause()--->onStop(),進入停滯狀態。
  • Activity返回前臺: onRestart()--->onStart()--->onResume(),再次回到運行狀態。
  • Activity退居後臺,且系統內存不足, 系統會殺死這個後臺狀態的Activity,若再次回到這個Activity,則會走onCreate()-->onStart()--->onResume()
  • 鎖定屏與解鎖屏幕 只會調用onPause(),而不會調用onStop方法,開屏後則調用onResume()
Android」四大組件之Activity,你真的都掌握了?

1.1.1 兩個活動間跳轉

  • Activity A 啟動另一個Activity B,回調如下: Activity A 的onPause() → Activity B的onCreate() → onStart() → onResume() → Activity A的onStop(); 如果B是透明主題又或則是個DialogActivity,則不會回調A的onStop;

如何將一個 Activity 設置成窗口的樣式? 只需要給我們的 Activity 配置如下屬性即可: android:theme="@android:style/Theme.Dialog"

1.1.2 onSaveInstanceState

Activity 的 onSaveInstanceState() 和 onRestoreInstanceState()並不是生命週期方法,它們不同於 onCreate()、onPause()等生命週期方法,它們並不一定會被觸發。

  • 調用條件
Android」四大組件之Activity,你真的都掌握了?

  • 應用場景
Android」四大組件之Activity,你真的都掌握了?

Android」四大組件之Activity,你真的都掌握了?

1.1.3 拓展

  • lateinit : 從原理分析Kotlin的延遲初始化: lateinit var和by lazy

Koltin中屬性在聲明的同時也要求要被初始化,否則會報錯。 例如以下代碼:

Android」四大組件之Activity,你真的都掌握了?

可是有的時候,我並不想聲明一個類型可空的對象,而且我也沒辦法在對象一聲明的時候就為它初始化,那麼這時就需要用到Kotlin提供的延遲初始化。 Kotlin中有兩種延遲初始化的方式。一種是lateinit var,一種是by lazy。

Android」四大組件之Activity,你真的都掌握了?

1.2 啟動模式


Android」四大組件之Activity,你真的都掌握了?

1.2.1 standard

  • 默認模式,可以不用寫配置。在這個模式下,都會默認創建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加。

1.2.2 singleTop

  • 可以有多個實例,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會創建新的實例,而會調用其onNewIntent方法。

1.2.3 singleTask

  • 只有一個實例。在同一個應用程序中啟動他的時候,若Activity不存在,則會在當前task創建一個新的實例,若存在,則會把task中在其之上的其它Activity destory掉並調用它的onNewIntent方法。
  • 如果是在別的應用程序中啟動它,則會新建一個task,並在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的實例中再打開新的Activity,這個新的Activity還是會在singleTask的實例的task中。

1.2.4 singleInstance

  • 只有一個實例,並且這個實例獨立運行在一個task中,這個task只有這個實例,不允許有別的Activity存在。

1.2.5 task

  • 我們知道,一個應用中可能有多個 Activity,而這些 Activity 被以棧的形式管理。當我們新打開 Activity 或者按返回時,會導致 Activity 的入棧/出棧。
  • Task 是指在執行特定任務時與用戶交互的一系列 Activity。 這些 Activity 按照各自的打開順序排列在堆棧中。

1.3 啟動過程

  • 這裡需要結合源碼自己看,不做展開,針對面試的話,只需記住方法/調用鏈即可
Android」四大組件之Activity,你真的都掌握了?

1.3.1 ActivityThread.java


  • 在Android中它就代表了Android的主線程,注意是代表而不是說它就是一個Thread類
  • 它是創建完新進程之後(肯定是在一個線程中啊),main函數被加載,然後執行一個loop的循環使當前線程進入消息循環,並且作為主線程。
  • 接下來還會初始化很多必要的屬性. 它的很多成員變量和內部類十分的重要,深入理解這些成員變量有助於我們進一步的認識Android系統的各個組件的交互。
Android」四大組件之Activity,你真的都掌握了?

Android」四大組件之Activity,你真的都掌握了?

Android」四大組件之Activity,你真的都掌握了?

Android」四大組件之Activity,你真的都掌握了?

1.3.2 拓展

  • Instrumentation

Android instrumentation是Android系統裡面的一套控制方法或者”鉤子“。 這些鉤子可以在正常的生命週期(正常是由操作系統控制的)之外控制Android控件的運行。 它們同時可以控制Android如何加載應用程序。

Base class for implementing實現 application instrumentation code工具代碼. When running with instrumentation turned on, this class will be instantiated for被實例化 you before any of the application code, allowing you to monitor all of the interaction交互 the system has with the application. An Instrumentation implementation is described to the system through an AndroidManifest.xml's tag.

  • ActivityManagerService「AMS」ActivityManagerService 你瞭解多少?

AMS是系統的引導服務,應用進程的啟動、切換和調度、四大組件的啟動和管理都需要AMS的支持。

  • ActivityStarter

ActivityStarter是加載Activity的控制類,收集所有的邏輯來決定如何將Intent和Flags轉為Activity並將其與Task和Stack關聯。

  • ActivityStackSupervisor

AMS 通過操作ActivityStackSupervisor來管理Activity

  • ActivityStack

ActivityStack從名稱來看是跟棧相關的類,其實它是一個管理類,用來管理系統所有Activity的各種狀態。它由ActivityStackSupervisor來進行管理的,而ActivityStackSupervisor在AMS中的構造方法中被創建。

  • ApplicationThread

它是ActivityThread的私有內部類,也是一個Binder對象。在此處它是作為IApplicationThread對象的server端等待client端 的請求然後進行處理,最大的client就是AMS.

Android」四大組件之Activity,你真的都掌握了?

1.4 關於 Content 和 Application

Android」四大組件之Activity,你真的都掌握了?

1.4.1 Context 須知

  • Context 從字面上理解就是上下文的意思,在實際應用中它也確實是起到了管理 上下文環境中各個參數和變量的總用,方便我們可以簡單的訪問到各種資源。
Android」四大組件之Activity,你真的都掌握了?

  • Context繼承關係
Android」四大組件之Activity,你真的都掌握了?

最後

本文主要講解 詳解Android中的四大組件之一:Activity。漫漫開發之路,我們只是其中的一小部分……只有不斷的學習、進階,才是我們的出路!才跟得上時代的進步!

今年年初我花一個月的時間收錄整理了一套知識體系,如果有想法深入的系統化的去學習的,可以私信我【安卓】

,我會把我收錄整理的資料都送給大家,幫助大家更快的進階。

重要的事說三遍,轉發+轉發+轉發,讓更多需要的朋友們都可以看到並且領到!

Android」四大組件之Activity,你真的都掌握了?


分享到:


相關文章: