1. 什么是 Android Architecture Components?
答: 組件是一組庫,可幫助您設計健壯、可測試且可維護的應用程序。它們提供了一種清晰且慣用的方式來使用 REST API。這些組件包括 Room、ViewModel、LiveData 等。
2. 什么是LiveData?
答: LiveData 是一個可觀察的數據持有者類,具有生命周期感知能力。這意味著它尊重其他應用組件(如Activity、Fragment或Service)的生命周期,并且僅更新處于活動生命周期狀態的應用組件觀察者。
3.什么是ViewModel?
答: ViewModel 類旨在以生命周期意識的方式存儲和管理與 UI 相關的數據。ViewModel 類允許數據在屏幕旋轉等配置更改后繼續存在。
4. 什么是 Room?
答: Room 是一個持久性庫,它在 SQLite 上提供了一個抽象層。它允許更強大的數據庫訪問,同時充分利用 SQLite 的全部功能。
5. LiveData如何與ViewModel配合使用?
答: LiveData 可以與 ViewModel 結合使用,當數據發生變化時自動更新 UI。ViewModel 持有 LiveData 對象,UI 組件觀察這些對象。
6. 使用 Android 架構組件有什么好處?
答: Android 架構組件可以幫助構建強大的應用程序架構,簡化數據變化的處理,并確保 UI 與數據的當前狀態相匹配。
7. ViewModel中的方法onCleared()
有什么用途?
答:onCleared()
當 ViewModel 不再使用并將被銷毀時,將調用 ViewModel 中的方法。此方法可用于清理 ViewModel 可能正在使用的任何資源。
8. LiveData 和 MutableLiveData 有什么區別?
答: LiveData 是一個可觀察的數據持有者類,而 MutableLiveData 是一個公開暴露setValue(T)
和postValue(T)
方法的 LiveData 類。當您需要更改存儲的數據時,可以使用 MutableLiveData。
9. 與原始 SQLite 相比,使用 Room 有什么優勢?
答: Room 在 SQLite 上提供了一個抽象層,使在 Android 中使用數據庫變得更加輕松和直觀。它包括 SQL 查詢的編譯時檢查,從而降低了運行時 SQL 錯誤的可能性。
10. Android架構組件中 Repository 起什么作用?
答: Repository 是一種在不同數據源(例如持久模型、Web 服務和緩存)之間進行調解的設計模式。在 Android 架構組件的上下文中,Repository 管理查詢線程并允許您使用多個后端。
11. 什么是數據綁定?它在 Android 架構組件中有何用處?
答: 數據綁定是一個支持庫,它允許您使用聲明性格式(而不是以編程方式)將布局中的 UI 組件綁定到應用中的數據源。這減少了樣板代碼并避免了常見的編程錯誤。
12. ViewModel 的生命周期是什么?
答: ViewModel 的生命周期從您第一次請求 ViewModel 開始,直到相關的 UI 控制器(活動或片段)完全完成并處于銷毀狀態。
13. LiveData中的setValue()
和postValue()
有什么區別?
答:setValue(T)
必須從主線程調用方法。如果從工作線程調用代碼,postValue(T)
則可以使用方法,該方法將任務發布到主線程以設置給定值。
14. Room如何處理對象關系?
答: Room 允許您定義實體之間的外鍵關系。通過聲明表之間的關系,這可以確保數據庫級別的完整性。
15. Room 中的 TypeConverter 是什么?
答: Room 提供了在原始類型和裝箱類型之間進行轉換的功能,但不允許實體之間的對象引用。這就是 TypeConverter 的作用所在。它允許您將自定義類轉換為 Room 可以持久化的已知類型。
16. LiveData在MVVM架構中起什么作用?
答: 在MVVM架構中,LiveData可以讓Model層的數據變化被ViewModel觀察到,進而自動反映到View層。
17. ViewModel
and AndroidViewModel
有什么區別?
答:AndroidViewModel
是 ViewModel
的子類,包含 Application
引用。例如,如果您需要上下文 Context 來訪問 SharedPreferences
或其他 Android 組件,這很有用。
18. Room 如何支持 LiveData?
答: Room 內置了對 LiveData 的支持。您的 DAO 方法可以返回一個LiveData
對象,LiveData
當數據庫更新時,Room 會生成所有必要的代碼來更新該對象。
19. 什么是 LiveData
變換?
答:Transformations
是一組可用于操作 LiveData 對象的實用方法。例如,Transformations.map()
將函數應用于 LiveData 的輸出并將結果傳播到下游。
20. 在 Android 架構組件中使用 Repository 有什么好處?
答: Repository 類抽象了對多個數據源的訪問。它處理數據操作并允許您使用多個后端,例如網絡、緩存和數據庫。這為應用程序的其余部分提供了一個干凈的 API,并有助于實現關注點分離。
21. Room 中 Entity
的作用是什么?
答: 一個Entity
代表數據庫內的一張表。Room 為每個有@Entity
注釋的類創建一個表,類中的字段與表中的列相對應。
22. Room 中 DAO
的作用是什么?
答:DAO
代表數據訪問對象。它是一個定義訪問數據庫的方法的接口。在 Room 中,您可以使用注釋 DAO 接口或抽象類@Dao
。
23. Room 中的 Database
是什么?
**答:**該類Database
是一個使用注解來定義實體列表和數據庫版本的持有者類。該類內容定義了數據庫內的表列表和版本。
24. Room 里的 allowMainThreadQueries()
和 fallbackToDestructiveMigration()
有什么區別?
答:allowMainThreadQueries()
允許 Room 在主線程上執行數據庫操作,但不建議這樣做,因為它可能會鎖定 UI。fallbackToDestructiveMigration()
如果數據庫表的架構已發生更改,則允許 Room 重新創建數據庫表。
25. Android 架構組件中 Paging Library
的作用是什么?
答: 分頁庫可幫助您一次加載和顯示小塊數據。當您處理會影響應用性能的大型數據集時,它非常有用。
**26. Android 架構組件中 WorkManager
有什么?
答: WorkManager
是一個用于后臺工作的庫,用于推遲任務或同步運行任務。它尊重應用程序的生命周期和狀態,并具有靈活的重試策略。
27. Android 架構組件上下文中 DiffUtil
是什么?
答:DiffUtil
是一個實用程序類,用于計算兩個列表之間的差異并輸出將第一個列表轉換為第二個列表的更新操作列表。
28. 什么是 LiveData
ReActiveStreams?
答:LiveData
ReActiveStreams 是一個提供轉換的庫,LiveData
可以更輕松地將其與 ReactiveStreams(例如 RxJava)集成。
29. Room中的 @Insert
注釋是什么?
答: Room中使用注解@Insert
來標記一個方法是插入方法,該方法的實現會將其參數插入到數據庫中。
30. Room中的 @Query
注釋是什么?
答: 注釋@Query
允許您編寫 SQL 語句并將其公開為 DAO 方法。Room 在編譯時驗證 SQL 查詢。
31. Room中的 @Delete
注釋是什么?
答: 該@Delete
注解用于將DAO類中的某個方法標記為刪除方法,該方法的實現會從數據庫中刪除其參數。
32. Room中的 @Update
注釋是什么?
答: 該@Update
注解用于標記DAO類中的方法為更新方法,該方法的實現會更新數據庫中的參數。
33. Room中 ConflictStrategy
是什么?
答:ConflictStrategy
定義一種在數據庫中插入或更新數據時解決運行時沖突的策略。
34. Room中的 Composite Primary Key
是什么?
答: 一個Composite Primary Key
允許您在 Room 中指定兩個或多個字段作為主鍵。這是使用注釋@Entity
并在屬性中指定字段名稱來完成的primaryKeys
。
35. Android 架構組件上下文中 PagedList
是什么?
答:PagedList
是 Paging Library 的一個組件。它是一個列表,以塊(頁面)的形式從 加載數據DataSource
。可以觀察它的變化并以隨機訪問的方式進行訪問。
**36. Android 架構組件中****有什么?
**答:**是一個提供作用域的實用程序類。它創建新的組件并將其保留在存儲中,以在配置更改后繼續存在。**ViewModelProvider**
ViewModelProvider``ViewModels``ViewModels
37. **ViewModelScope**
Android 架構組件是什么?
答:ViewModelScope
是與 ViewModel 的生命周期綁定的范圍。它用于啟動協程,這些協程將在 ViewModel 被清除時被取消。
38. **LiveDataScope**
Android 架構組件中有什么?
答:LiveDataScope
是生成 LiveData 值的代碼塊的范圍。它與liveData
builder 函數一起使用。
39.Room中的注釋是什么**@Transaction**
?
答: Room中使用注解@Transaction
來標記某個方法為事務方法,該方法的實現會在單個事務中運行。
40.Android**Flow**
架構組件上下文中是什么? 答:Flow
是 Kotlin 協程庫中的一種類型,用于異步處理數據流。Room 提供 API 以將查詢結果作為Flow
.
**41. Android 架構組件的上下文****是什么?**DataSource.Factory**
答:DataSource.Factory
是數據源的工廠類。它與分頁庫一起使用,用于DataSource
從數據庫或網絡創建分頁數據。
42.Android**PositionalDataSource**
架構組件的上下文是什么?
答:PositionalDataSource
是DataSource
可以按位置或計數訪問的數據類。當您要加載可計數的靜態數據集(例如來自數據庫查詢)時,它很有用。
43.Android**ItemKeyedDataSource**
架構組件的上下文是什么?
答:ItemKeyedDataSource
是DataSource
根據鍵獲取數據的類。當你需要使用來自項目 N-1 的數據來獲取項目 N 時,它很有用。
44.Android**PageKeyedDataSource**
架構組件的上下文是什么?
答:PageKeyedDataSource
是DataSource
用于在頁面中獲取數據的類。當有下一頁或上一頁的鍵時(例如在 API 中),它很有用。
45.Android**BoundaryCallback**
架構組件的上下文是什么?
答:BoundaryCallback
是當到達可用數據的末尾時的回調PagedList
。它用于發出信號,提醒您應該獲取更多數據。
**46. Android 架構組件的上下文****是什么?**MutableStateFlow**
答:MutableStateFlow
是狀態持有者可觀察流,向其收集器發出當前和新的狀態更新。它是 Kotlin 協程庫的一部分。
47. **StateFlow**
Android 架構組件上下文中的內容是什么? StateFlow
是一個狀態持有者可觀察流,它會向其收集器發出當前和新的狀態更新。它是 Kotlin 協程庫的一部分。
48. **SharedFlow**
Android 架構組件的上下文是什么?
答:SharedFlow
是一種熱流,它在其所有收集器之間共享發射值。它是 Kotlin 協程庫的一部分。
49.Android**ConflatedBroadcastChannel**
架構組件的上下文是什么?
答:ConflatedBroadcastChannel
是一種BroadcastChannel
在發送后立即使用并合并其元素的方法,以便接收方始終獲得最近發送的元素。它是 Kotlin 協程庫的一部分。
50.Android**MutableSharedFlow**
架構組件的上下文是什么?
答:MutableSharedFlow
是一個SharedFlow
提供函數來發出值的函數。它是 Kotlin 協程庫的一部分。
51.Android**CoroutineScope**
架構組件的上下文是什么?
答:CoroutineScope
是一個定義啟動協程范圍的接口。所有協程構建器都是CoroutineScope
其協程上下文的擴展和繼承,以自動傳播上下文元素和取消。
52.Android**CoroutineDispatcher**
架構組件的上下文是什么?
答:CoroutineDispatcher
是 Kotlin 協程庫中的一個接口,用于將協程執行調度到特定線程。
53.Android**Dispatchers.Main**
架構組件的上下文是什么?
答:Dispatchers.Main
是CoroutineDispatcher
僅限于主線程操作 UI 對象的。它通常用于與 UI 相關的任務。
54. **Dispatchers.IO**
Android 架構組件的上下文是什么?
答:Dispatchers.IO
是一種CoroutineDispatcher
旨在將阻塞 IO 任務卸載到共享線程池的設計。
55. **Dispatchers.Default**
Android 架構組件的上下文是什么?
答:Dispatchers.Default
是一種CoroutineDispatcher
針對 CPU 密集型工作進行優化的程序,例如對大型列表進行排序、執行復雜計算和類似的任務。
56. **suspend**
Android 架構組件上下文中的關鍵字是什么?
答:suspend
是 Kotlin 中的一個關鍵字,用于將函數或方法標記為暫停函數。這些函數可以暫停協程的執行,而不會阻塞底層線程。
57. **CoroutineContext**
Android 架構組件的上下文是什么?
答:CoroutineContext
是一組定義協程行為的各種元素。它包括協程的作業和協程使用的調度程序等元素。
58.Android**Job**
架構組件的上下文是什么?
答:Job
是一個表示可取消工作的一個接口。它具有生命周期,并可以形成結構化的并發層次結構。
59.Android**SupervisorJob**
架構組件的上下文是什么?
答:SupervisorJob
是一種不會將取消傳播給其子代的類型Job
。當您有一組應該相互獨立的協程時,這很有用。
60.Android**CoroutineExceptionHandler**
架構組件的上下文是什么?
答:CoroutineExceptionHandler
是的可選元素,CoroutineContext
當上下文中的協程引發異常時調用。
61.Android**CoroutineName**
架構組件的上下文是什么?
答:CoroutineName
是協程的名稱,包含在執行此協程的線程名稱中。它在CoroutineContext
協程的中定義。
62.Android**CoroutineStart**
架構組件的上下文是什么?
答:CoroutineStart
是一個可以傳遞給協程構建器(如和)的選項launch
,async
用于確定何時啟動協程。
63.Android**launch**
架構組件上下文中的內容是什么? 答:launch
是一個協程構建器,用于啟動協程。它創建一個新的協程并以 的形式返回對它的引用Job
。
64.Android**async**
架構組件上下文中什么是? 答:async
是一個協程構建器,用于啟動協程以進行并發工作。它創建一個新的協程并將其未來結果作為的實現返回Deferred<T>
。
65.Android**runBlocking**
架構組件的上下文是什么?
答:runBlocking
是一個協程構建器,它會阻塞當前線程,直到其協程主體及其所有子線程完成執行。
66.Android**withContext**
架構組件的上下文是什么?
答:withContext
是一個暫停函數,它改變CoroutineDispatcher
其范圍內代碼塊的執行。
67.Android**Deferred**
架構組件的上下文中是什么? 答:Deferred
是非阻塞的可取消的 Future — 它是一個有結果的 Job。
68.Android**select**
架構組件上下文中的表達是什么?
答:select
在 Kotlin 協程中,表達式用于從多個已準備好執行的暫停函數中選擇一個。
69.Android**yield**
架構組件上下文中的功能是什么?
答:yield
是一個暫停函數,用于給其他協程一個執行的機會。
70.Android**join**
架構組件上下文中的功能是什么?
答:join
是一個暫停函數,用于等待協程完成而不阻塞當前線程。
71.Android**cancel**
架構組件上下文中的功能是什么?
解答:cancel
該函數用來取消一個協程作業。
72.Android**isActive**
架構組件上下文中的屬性是什么?
isActive`是協程的一個屬性,如果作業仍然處于活動狀態(尚未完成且未被取消),則`Job`返回。`true
74.Android**isCompleted**
架構組件上下文中的屬性是什么?
答:isCompleted
是協程的一個屬性,如果作業由于某種原因完成則Job
返回。true
75.Android**isCancelled**
架構組件上下文中的屬性是什么?
答:isCancelled
是協程的一個屬性,如果作業由于任何原因被取消,則Job
返回。true
76.Android**children**
架構組件上下文中的屬性是什么?
答:children
是協程的一個屬性Job
,它返回其直屬子進程的序列。
77.Android**cancelAndJoin**
架構組件上下文中的功能是什么?
答:cancelAndJoin
是一個暫停函數,它取消作業并等待其完成。
78.Android**ensureActive**
架構組件上下文中的功能是什么?
答:ensureActive
是一個檢查協程的作業是否仍然處于活動狀態的函數。如果不是,它會拋出一個CancellationException
。
79. **handleCoroutineException**
Android 架構組件上下文中的功能是什么?
答: handleCoroutineException
是一個處理協程中未捕獲異常的函數。它通常用于CoroutineExceptionHandler
。
80. **NonCancellable**
Android 架構組件的上下文是什么?
答:NonCancellable
是無法取消的作業。當你需要使代碼的某個部分不可取消時使用它。
81. **SupervisorScope**
Android 架構組件的上下文是什么?
答:SupervisorScope
是不會傳播其子代取消的范圍。當你需要使代碼的某個部分在取消方面獨立時,可以使用它。
82. **coroutineScope**
Android 架構組件上下文中的功能是什么?
答:coroutineScope
是一個暫停函數,它創建一個新的協程范圍,并且直到所有啟動的子程序完成后才會完成。
83. **supervisorScope**
Android 架構組件上下文中的功能是什么?
答: supervisorScope
是一個暫停函數,它會創建一個新的主管作用域。當你需要使代碼的某個部分在取消方面獨立時,就會使用它。
84. **launchIn**
Android 架構組件上下文中的功能是什么?
答:launchIn
是一個擴展函數Flow
,它在提供的協程范圍內啟動流的收集。
85.Android**catch**
架構組件上下文中的操作符是什么?
答:catch
是 Kotlin 的 Flow API 中的一個運算符,它捕獲來自上游的異常并將其作為下游的值發出。
86. **collect**
Android 架構組件上下文中的功能是什么?
答:collect
是 Kotlin 的 Flow API 中的終端運算符,用于收集流發出的值。
87.Android**flowOn**
架構組件上下文中的操作符是什么?
答:flowOn
是 Kotlin 的 Flow API 中的一個運算符,它改變其上游流的上下文。
88.Android**map**
架構組件上下文中的操作符是什么?
答: map 是 Kotlin 的 Flow API 中的一個運算符,用于轉換流發出的值。
89.Android**filter**
架構組件上下文中的操作符是什么?
答:filter
是 Kotlin 的 Flow API 中的一個運算符,它根據謂詞過濾流發出的值。
90.Android**reduce**
架構組件上下文中的操作符是什么?
答:reduce
是 Kotlin 的 Flow API 中的終端運算符,它將流發出的值累積為單個值。
92. **scan**
Android 架構組件上下文中的操作符是什么?
答:scan
是 Kotlin 的 Flow API 中的一個運算符,它累積流發出的值并發出每個中間結果。
93. **take**
Android 架構組件上下文中的操作符是什么?
答:take
是 Kotlin 的 Flow API 中的一個運算符,它僅接受流發出的前 n 個值。
94. **buffer**
Android 架構組件上下文中的操作符是什么?
答:buffer
是 Kotlin 的 Flow API 中的一個運算符,它允許流異步收集值并將它們發送到使用它們的緩沖區。
95. **combine**
Android 架構組件上下文中的操作符是什么?
答:combine
是 Kotlin 的 Flow API 中的一個運算符,它通過組合函數將多個流的最新值組合在一起。
96. **zip**
Android 架構組件上下文中的操作符是什么?
答:zip
是 Kotlin 的 Flow API 中的一個運算符,用于將兩個流組合成對。它會等待兩個流的值,并在兩個流都可用時立即將它們組合起來。
97.Android**onEach**
架構組件上下文中的操作符是什么?
答:onEach
是 Kotlin 的 Flow API 中的一個運算符,對流的每個值執行給定的操作。
98.Android**catch**
架構組件上下文中的操作符是什么?
答:catch
是 Kotlin 的 Flow API 中的一個運算符,它捕獲來自上游流的異常并將其作為下游值發出。
99. **flatMapConcat**
Android 架構組件上下文中的操作符是什么?
答:flatMapConcat
是 Kotlin 的 Flow API 中的一個運算符,它將原始流轉換為多個流,然后將這些流展平為單個流。
100.AndroidflatMapMerge
架構組件上下文中的操作符是什么?
答:flatMapMerge
是 Kotlin 的 Flow API 中的一個操作符,它可以將原始流轉換為多個流,然后將這些流合并為一個流。
101.Android**flatMapLatest**
架構組件上下文中的操作符是什么?
答:flatMapLatest
是 Kotlin 的 Flow API 中的一個操作符,它將原始流轉換為多個流,然后在發出時立即切換到最新的流。
102.Android**StateFlow**
架構組件的上下文是什么?
答:StateFlow
是狀態持有者可觀察流,向其收集器發出當前和新的狀態更新。它是 Kotlin 協程庫的一部分。
103.Android**SharedFlow**
架構組件的上下文是什么?
答:SharedFlow
是一種熱流,它在其所有收集器之間共享發射值。它是 Kotlin 協程庫的一部分。