Android 架构组件面试问答

  1. 什么是 Android 架构组件? Android 架构

**答:**组件是一组库,可帮助您设计健壮、可测试且可维护的应用程序。它们提供了一种清晰且惯用的方式来使用 REST API。这些组件包括 Room、ViewModel、LiveData 等。

2.什么是LiveData?

答: LiveData 是一个可观察的数据持有者类,具有生命周期感知能力。这意味着它尊重其他应用组件(如活动、片段或服务)的生命周期,并且仅更新处于活动生命周期状态的应用组件观察者。

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.有什么区别 **

答:**是 的子类,包含引用。例如,如果您需要上下文来访问或其他 Android 组件,这很有用。**ViewModel**``**AndroidViewModel** AndroidViewModel``ViewModel``Application``SharedPreferences

18.Room如何支持LiveData?

答: Room 内置了对 LiveData 的支持。您的 DAO 方法可以返回一个LiveData对象,LiveData当数据库更新时,Room 会生成所有必要的代码来更新该对象。

19.什么是 **LiveData**变换?

答: Transformations是一组可用于操作 LiveData 对象的实用方法。例如,Transformations.map()将函数应用于 LiveData 的输出并将结果传播到下游。

2 0.在 Android 架构组件中使用 Repository 有什么好处?

答: Repository 类抽象了对多个数据源的访问。它处理数据操作并允许您使用多个后端,例如网络、缓存和数据库。这为应用程序的其余部分提供了一个干净的 API,并有助于实现关注点分离。

\21. Room 中****的作用是什么? **Entity**

答: AnEntity代表数据库内的一张表。Room 为每个有@Entity注释的类创建一个表,类中的字段与表中的列相对应。

22. 什么是 **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.什么是 **ConflictStrategy**室内客房?

答: ConflictStrategy定义一种在数据库中插入或更新数据时解决运行时冲突的策略。

**34. 什么是Composite Primary Key室内客房?

答: AComposite 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 值的代码块的范围。它与liveDatabuilder 函数一起使用。

39.Room中的注释是什么 **@Transaction**

答: Room中使用注解@Transaction来标记某个方法为事务方法,该方法的实现会在单个事务中运行。

40.Android **Flow**架构组件上下文中是什么? 答: Flow是 Kotlin 协程库中的一种类型,用于异步处理数据流。Room 提供 API 以将查询结果作为Flow.

**41. Android 架构组件的上下文****是什么? **DataSource.Factory**

答: DataSource.Factory是数据源的工厂类。它与分页库一起使用,用于DataSource从数据库或网络创建分页数据。

42.Android **PositionalDataSource**架构组件的上下文是什么?

答: PositionalDataSourceDataSource可以按位置或计数访问的数据类。当您要加载可计数的静态数据集(例如来自数据库查询)时,它很有用。

43.Android **ItemKeyedDataSource**架构组件的上下文是什么?

答: ItemKeyedDataSourceDataSource根据键获取数据的类。当你需要使用来自项目 N-1 的数据来获取项目 N 时,它很有用。

44.Android **PageKeyedDataSource**架构组件的上下文是什么?

答: PageKeyedDataSourceDataSource用于在页面中获取数据的类。当有下一页或上一页的键时(例如在 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.MainCoroutineDispatcher仅限于主线程操作 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是一个可以传递给协程构建器(如和)的选项launchasync用于确定何时启动协程。

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 协程库的一部分。

相关推荐
Dann Hiroaki8 小时前
GPU架构概述
架构
茶馆大橘9 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客9 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
帅得不敢出门10 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
lipviolet10 小时前
架构系列---高并发
架构
Phodal10 小时前
架构赋能 AI:知识工程推动下的软件架构数字化
人工智能·架构
我又来搬代码了12 小时前
【Android】使用productFlavors构建多个变体
android
曹申阳12 小时前
2. JVM的架构模型和生命周期
jvm·架构
德育处主任13 小时前
Mac和安卓手机互传文件(ADB)
android·macos
芦半山13 小时前
Android“引用们”的底层原理
android·java