Android學(xué)習(xí)筆記(持續(xù)更新)

生命周期

區(qū)分三個(gè)關(guān)鍵類

lifecycle他是一個(gè)代表android生命周期及其所處狀態(tài)的對(duì)象

lifecycleOwner是具有生命周期的對(duì)象的接口,如AppcompatActivity或Activity、Fragment

lifecycleObserver用于觀察生命周期的接口,如LiveData,設(shè)置生命周期所有者以觀察 LiveData,當(dāng)生命周期所有者處于活動(dòng)狀態(tài)時(shí)(STARTEDRESUMED),LiveData 觀察器才會(huì)觀察應(yīng)用數(shù)據(jù)的更改。

URI

Uri 是 Uniform Resource Identifier(統(tǒng)一資源標(biāo)識(shí)符)的縮寫,用于表示一個(gè)資源的唯一標(biāo)識(shí)符。

Uri 可以用于表示除了文件之外的許多類型的資源,包括但不限于以下幾種:

  1. 內(nèi)容提供器(Content Provider):Uri 可以用于訪問應(yīng)用程序中使用的內(nèi)容提供器,例如 Android 系統(tǒng)提供的聯(lián)系人、短信、通話記錄等數(shù)據(jù)。

  2. 網(wǎng)絡(luò)資源:Uri 可以用于表示網(wǎng)絡(luò)資源,例如網(wǎng)頁(yè)、圖片、音視頻等。

  3. 聯(lián)系人:Uri 可以用于表示聯(lián)系人的唯一標(biāo)識(shí)符,例如 content://com.android.contacts/contacts/1 表示 ID 為 1 的聯(lián)系人。

  4. 地理位置:Uri 可以用于表示地理位置的坐標(biāo),例如 geo:37.7749,-122.4194 表示舊金山市的經(jīng)緯度坐標(biāo)。

  5. Android 資源:Uri 可以用于表示 Android 應(yīng)用程序中的資源,例如圖片、音頻、視頻等。可以使用 ContentResolver 類從 Uri 對(duì)象中讀取資源數(shù)據(jù)。

  6. 其他類型的資源:Uri 還可以用于表示其他類型的資源,例如日歷事件、電子郵件等。

Android 版本

Android API 級(jí)別與 Android 版本的對(duì)應(yīng)關(guān)系:

Android API 級(jí)別 Android 版本
31 Android 13
30 Android 12
29 Android 10, 11
28 Android 9
27 Android 8.1
26 Android 8.0
25 Android 7.1
24 Android 7.0
23 Android 6.0
22 Android 5.1
21 Android 5.0
20 Android 4.4W
19 Android 4.4
18 Android 4.3
17 Android 4.2
16 Android 4.1
15 Android 4.0.3
14 Android 4.0
13 Android 3.2
12 Android 3.1
11 Android 3.0
10 Android 2.3.3
9 Android 2.3
8 Android 2.2
7 Android 2.1
6 Android 2.0.1
5 Android 2.0

Android Gradle插件版本與Gradle版本對(duì)應(yīng)

插件版本 所需的最低 Gradle 版本
8.1 8.0
8.0 8.0
7.4 7.5
7.3 7.4
7.2 7.3.3
7.1 7.2
7.0 7.0
4.2.0+ 6.7.1

進(jìn)入官網(wǎng)

Android Gradle 插件和 Android Studio 兼容性

Android Studio 版本 所需插件版本
Giraffe 2022.3.1 3.2-8.1
Flamingo 2022.2.1 3.2-8.0
Electric Eel 2022.1.1 3.2-7.4
Dolphin 2021.3.1 3.2-7.3
Chipmunk 2021.2.1 3.2-7.2
Bumblebee 2021.1.1 3.2-7.1
Arctic Fox 2020.3.1 3.1-7.0

fragment和fragment生命周期

fragment 就是可重復(fù)使用的應(yīng)用界面片段。與 activity 類似,fragment 具有生命周期并可以響應(yīng)用戶輸入。fragment 在屏幕上顯示時(shí),會(huì)始終包含在 activity 的視圖層次結(jié)構(gòu)中。由于 fragment 側(cè)重于可重用性和模塊化,因此甚至可以由單個(gè) activity 同時(shí)托管多個(gè) fragment。每個(gè) fragment 都管理著自己?jiǎn)为?dú)的生命周期。

fragment 生命周期

和 activity 一樣,fragment 可以初始化以及從內(nèi)存中移除;在整個(gè)存在期間,fragment 也會(huì)在屏幕上顯示、消失和重新顯示。此外,與 activity 類似,fragment 也有具有多種狀態(tài)的生命周期,并提供了幾種可替換的方法來響應(yīng)它們之間的轉(zhuǎn)換。fragment 生命周期有五種狀態(tài),由 Lifecycle.State 枚舉表示。

  • INITIALIZED:fragment 的一個(gè)新實(shí)例已實(shí)例化。

  • CREATED:系統(tǒng)已調(diào)用第一批 fragment 生命周期方法。在 fragment 處于此狀態(tài)期間,系統(tǒng)也會(huì)創(chuàng)建與其關(guān)聯(lián)的視圖。

  • STARTED:fragment 在屏幕上可見,但沒有焦點(diǎn),這意味著其無(wú)法響應(yīng)用戶輸入。

  • RESUMED:fragment 可見并已獲得焦點(diǎn)。

  • DESTROYED:fragment 對(duì)象已解除實(shí)例化。

此外,與 activity 類似,Fragment 類還提供了多種可替換的方法來響應(yīng)生命周期事件。

  • onCreate():fragment 已實(shí)例化并處于 CREATED 狀態(tài)。不過,其對(duì)應(yīng)的視圖尚未創(chuàng)建。

  • onCreateView():此方法可用于膨脹布局。fragment 已進(jìn)入 CREATED 狀態(tài)。

  • onViewCreated():此方法在創(chuàng)建視圖后調(diào)用。在此方法中,您通常會(huì)通過調(diào)用 findViewById() 將特定視圖綁定到屬性。

  • onStart():fragment 已進(jìn)入 STARTED 狀態(tài)。

  • onResume():fragment 已進(jìn)入 RESUMED 狀態(tài),現(xiàn)已具有焦點(diǎn)(可響應(yīng)用戶輸入)。

  • onPause():fragment 已重新進(jìn)入 STARTED 狀態(tài)。相應(yīng)界面對(duì)用戶可見。

  • onStop():fragment 已重新進(jìn)入 CREATED 狀態(tài)。該對(duì)象已實(shí)例化,但它在屏幕上不再顯示。

  • onDestroyView():該方法在 fragment 進(jìn)入 DESTROYED 狀態(tài)之前調(diào)用。視圖已從內(nèi)存中移除,但 fragment 對(duì)象仍然存在。

  • onDestroy():fragment 進(jìn)入 DESTROYED 狀態(tài)。

下圖總結(jié)了 fragment 生命周期以及狀態(tài)之間的轉(zhuǎn)換。


fragment生命周期

生命周期狀態(tài)和回調(diào)方法與用于 activity 的方法非常相似。但請(qǐng)注意 onCreate() 方法的差異。通過 activity,您可以使用此方法膨脹布局和綁定視圖。不過,在 fragment 生命周期中,系統(tǒng)會(huì)在創(chuàng)建視圖之前調(diào)用 onCreate(),所以您無(wú)法在此處膨脹布局。您可以改為在 onCreateView() 中執(zhí)行此操作。然后,在創(chuàng)建視圖后,系統(tǒng)會(huì)調(diào)用 onViewCreated() 方法,您可以在該方法中將屬性綁定到特定視圖。

雖然這可能聽起來理論性很強(qiáng),但您已經(jīng)基本了解 fragment 的工作原理以及它們與 activity 的相似之處和不同之處。在此 Codelab 的其余部分,您將實(shí)際運(yùn)用這些知識(shí)。首先,您需要遷移之前使用的 Words 應(yīng)用,以使用基于 fragment 的布局。然后,您可以在單個(gè) activity 內(nèi)的多個(gè) fragment 之間實(shí)現(xiàn)導(dǎo)航。

命名規(guī)范(下劃線開頭的屬性名)

在 Kotlin 以及一般的編程語(yǔ)言中,通常會(huì)遇到以下劃線開頭的屬性名稱。這通常表示屬性不應(yīng)直接訪問。使用viewBinding時(shí),您可以使用綁定屬性訪問 XXXFragment 中的視圖綁定。不過,您無(wú)需在 Fragment 之外訪問 _binding 屬性。

class XXXFragment: Fragment(){
    private var _binding: FragmentXXXBinding? = null
    private val binding get() = _binding!!
    
    override fun onCreateView(
        inflater: LayoutInflater, container:
        ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding =
        FragmentXXXBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
   }
}

AndroidX

AndroidX 版本 | Android 開發(fā)者 | Android Developers

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容