前50个Android面试问题和答案 – SDE I 到 SDE III

2021年11月10日18:43:31 发表评论 417 次浏览

在这场 COVID-19 大流行中,世界正在从“从办公室工作”文化转变为“在家工作”文化。此外,世界各地的人们现在都依赖于应用程序,无论是用于购物、通勤、支付账单等日常任务,还是获取信息和保持联系。由于这个原因,公司并没有回避在印度增加 Android 开发人员的工资,下面我们为你介绍Android面试问题和答案,让你的职业生涯更顺利。

前50个Android面试问题和答案 – SDE I 到 SDE III
Android常见面试题和答案合集

此外,经验越好,薪水就越高。如果我们谈论美国和英国的 Android 开发人员薪水,那么数字分别为 113,900 美元和 35,554 英镑。更有趣的是,每天有 6000 多个应用在 Google Play 商店发布!! 想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?单击此处前往由我们的专家精心策划的Android常见面试题和答案合集和指南,旨在让你立即做好行业准备!

但是,在“Android 软件开发”中建立自己的职业生涯容易吗?进入 Android 开发世界的过程或步骤是什么?面试环节会问什么问题?Android有哪些最新面试题?因此,让我们简要讨论进入 Android 开发世界的过程或步骤。    

  • 第 1 步: 恢复入围名单
  • 第 2 步: 带回家的作业
    • 他们会给你一个作业,你必须在规定的时间内完成
  • 第三步:第一轮(讨论带回家的作业+基本概念)
    • 关于带回家作业的讨论意味着你为什么用这个“x”的东西为什么不用这个“y”,
    • 怎样才能更好
    • Kotlin/Java 和 Android 等基础知识
  • 第 4 步: 第二轮(Kotlin/Java 和 Android + 编程中的深入概念)
    • 深入意味着Kotlin Coroutine,
    • 内存泄漏,
    • 如果你的 Activity 打开缓慢如何进行调查,
    • 数据结构与算法等
  • 第 5 步: 第三轮(取决于公司对公司)
    • 可能是团队领导,
    • HR回合等

一般来说,公司招聘以下 3 个角色:

角色需要经验预期问题
SDE – I (Android)0 – 2 年经验或更新鲜Kotlin/Java 基础、Android 基础概念(活动、服务、片段等)
SDE – II (安卓)2 – 5 年经验架构(MVVM、MVP)、如何进行测试等。
SDE – III (安卓)4 – 8 年的经验依赖注入(Dagger、Kotlin 协程、内存泄漏等)

谷歌、亚马逊、Facebook等科技巨头到Dream11、Zomato、Paytm、CRED等新兴初创公司,都在为其公司招聘大量 Android 开发人员。因此,我们准备了一份Top 50 Android 面试问题列表及其答案,问题从新鲜到高级依次设计。 

1.什么是Android和最新版本的Android?

Android 是一种基本为手机构建的操作系统。它基于 Linux 内核和其他开源软件,由 Google 开发。它用于触摸屏移动设备,如智能手机和平板电脑。但如今这些都用于 Android Auto 汽车、电视、手表、相机等。它一直是最畅销的智能手机操作系统之一。Android OS 是由 Android Inc. 开发的。

Android 最新版本为Android 11(API 级别 30),初始稳定发布日期为2020 年 9 月 8 日。Android 12 现在处于开发者审查阶段,下面是 Android 12 的时间表。

前50个Android面试问题和答案 – SDE I 到 SDE III

要了解更多信息,请参阅相应的文章:介绍到Android

2.什么是Android中的Activity?

Activity 类是 Android 组件中非常重要的部分之一。任何应用程序,无论它有多小(在代码和可扩展性方面),都至少有一个 Activity 类。与大多数编程语言不同,其中main()方法是该程序或应用程序开始执行的入口点,Android 操作系统通过调用对应于特定阶段的特定回调方法来启动 Activity 实例中的代码。它的生命周期。所以可以说 Activity 是与用户交互的入口点。

要了解更多信息,请参阅文章:介绍活动中的Android

3、Android前端开发为什么要用XML? 

Android面试问题和答案:XML 代表可扩展标记语言。XML 是一种标记语言,很像用于描述数据的 HTML。XML 本身对人和机器都具有良好的可读性。此外,它具有可扩展性且易于开发。在 Android 中,我们使用 XML 来设计我们的布局,因为 XML 是一种轻量级语言,所以它不会使我们的布局变得沉重。

4. Android 应用程序的组成部分是什么?

Android常见面试题和答案合集:Android 应用程序包含一些必要的构建块。这些松散耦合的组件受应用程序清单文件的约束,该文件包含每个组件的描述以及它们如何交互。android应用程序的四个主要组件是:

  • 活动
  • 服务
  • 内容提供者
  • 广播接收器
  • 意图

要了解更多信息,请参阅相应的文章:组件Android应用程序

5.什么是Dalvik虚拟机?

DVM 是执行 Android 应用程序的虚拟机。javac 编译器生成的 Java 字节码(.class 文件)被转换为Dalvik 字节码,使应用程序源文件在 DVM 上可执行。由于 Android 设备具有一定的处理能力、内存和电池寿命,因此 DVM 设计原则旨在优化自身,使其即使在低内存/低功耗设备上也能快速加载并流畅运行。此虚拟机在同一设备上运行多个实例时非常高效。

要了解更多信息,请参阅相应的文章: DVM

6、Dalvik和ART有什么区别?

要了解更多信息,请参阅相应的文章:差异的Dalvik和艺术之间的安卓

7. Android 应用程序如何工作?

开发一个 android 应用程序涉及几个顺序发生的过程。编写好源代码文件后,当开发者在Android studio 上点击Run 按钮时,大量的操作和流程就从后端开始了。

  • 构建 APK 文件
    • 代码编译
    • 转换为 Dalvik 字节码
    • 生成 .apk 文件
    • 应用分发
  • 部署应用程序
    • 建立亚行服务器
    • 将 .apk 文件传输到设备
  • 运行应用程序
    • 应用启动请求
    • 将 .dex 代码转换为原生 OAT 格式

要了解更多信息,请参阅相应的文章:如何做Android应用程序工作?

8.什么是Android中的Toast?

吐司是Android屏幕上的时间短的时间间隔示出的短警报消息。Android Toast是一个简短的弹出通知,用于在我们的应用程序中执行任何操作时显示信息。它会自动消失。如果用户想要永久可见的消息,则可以使用通知

要了解更多信息,请参阅相应的文章:吐司

9. android 中的服务是什么?

Android 中的服务是一个特殊的组件,它便于应用程序在后台运行以执行长时间运行的操作任务。服务的主要目的是确保应用程序在后台保持活动状态,以便用户可以同时操作多个应用程序。android 服务不需要用户界面,因为它旨在在没有任何用户干预的情况下运行长时间运行的进程。即使应用程序关闭或用户切换到另一个应用程序,服务也可以在后台持续运行。 

要了解更多信息,请参阅相应的文章:服务中的Android

10. 什么是android中的Content Provider?

在 Android 中,Content Providers 是一个非常重要的组件,它服务于关系数据库的目的,用于存储应用程序的数据。内容提供者在安卓系统中的作用就像一个中央存储库,应用程序的数据存储在其中,它有助于其他应用程序根据用户需求安全地访问和修改这些数据。Android 系统允许内容提供者以多种方式存储应用程序数据。用户可以通过将图像、音频、视频和个人联系信息等应用程序数据存储在 SQLite 数据库、文件甚至网络中来管理它们。

要了解更多信息,请参阅相应的文章:在Android内容提供商

11. android 中的广播接收器是什么?

android 中的广播是系统范围的事件,可以在设备启动、设备收到消息、收到来电或设备进入飞行模式等时发生。广播接收器用于响应这些系统范围的事件。广播接收器允许我们注册系统和应用程序事件,当该事件发生时,注册接收器会得到通知。广播接收器主要有两种类型:

  • 静态广播接收器:这些类型的接收器在清单文件中声明,即使应用程序关闭也能工作。
  • 动态广播接收器:这些类型的接收器仅在应用程序处于活动状态或最小化时才起作用。

要了解更多信息,请参阅相应的文章: 广播接收器在安卓 

12. Gradle是什么,写下它在Android中的用法?

Gradle 是一个构建系统(开源),用于自动化构建、测试、部署等。“Build.gradle”是可以自动化任务的脚本。例如,将一些文件从一个目录复制到另一个目录的简单任务可以在实际构建过程发生之前由 Gradle 构建脚本执行。 

用法:每个 Android 项目都需要一个 Gradle,用于从项目中的.java.xml文件生成 apk 。简而言之,Gradle 获取所有源文件(java 和 XML)并应用适当的工具,例如,将 java 文件转换为 dex 文件并将它们全部压缩为一个名为 apk 的文件,该文件被称为实际使用的文件。

要了解更多信息,请参阅相应的文章:的build.gradle文件,介绍摇篮

13. android 中的 Fragment 是什么?

在 Android 中,片段是 Activity 的一部分,代表屏幕上用户界面 (UI) 的一部分。android 活动的模块化部分非常有助于创建本质上灵活且可根据设备屏幕大小自动调整的 UI 设计。主要有3种类型的片段:

  • 单个片段
  • 列表片段
  • 分片交易

要了解更多信息,请参阅文章:介绍片段

14. Android 中的 RecyclerView 是什么以及它是如何工作的?

RecyclerView 是 Android Studio 添加的一个 ViewGroup 作为 GridView 和 ListView 的继承者。这是对两者的改进。它的创建是为了可以将任何具有XML布局的列表构建为一个可以大量定制的项目,同时提高 ListViews 和 GridViews 的效率。这种改进是通过回收超出用户可见性的视图来实现的。例如,如果用户向下滚动到项目 4 和 5 可见的位置;第 1、2 和 3 项将从内存中清除以减少内存消耗。 

要了解更多信息,请参阅相应的文章: RecyclerView在Android中使用实例

15. Intent 和 Intent 过滤器有什么区别?

Intent 是传递给Context.startActivity()、Context.startService() 或 Activity.startActivityForResult()等的对象,以启动 Activity 或获取现有 Activity 以执行新操作。另一方面,意图过滤器描述了组件的能力(如活动、服务和广播接收器)。 

要了解更多信息,请参阅相应的文章:分段隐意图和明确意图在各Android

16.什么是AndroidManifest.xml?

Android面试问题和答案:Android 中的每个项目都包含一个清单文件,即 AndroidManifest.xml,存储在其项目层次结构的根目录中。清单文件是我们应用程序的重要组成部分,因为它定义了我们应用程序的结构和元数据、它的组件和它的要求。该文件包含每个活动、服务、内容提供者和广播接收器的节点,它们构成应用程序并使用意图过滤器和权限确定它们如何相互协调以及如何与其他应用程序协调。清单文件还指定了应用程序元数据,包括其图标、版本号、主题等,附加的顶级节点可以指定任何所需的权限、单元测试,并定义硬件、屏幕或平台要求。

要了解更多信息,请参阅相应的文章:应用程序清单文件

17.什么是Android SDK及其组件?

Android SDK代表Android 软件开发工具包这是由谷歌为 Android 平台开发的。借助 Android SDK,我们可以轻松创建 Android 应用程序。Android SDK 是开发 Android 应用程序必不可少的库和软件开发工具的集合。每当 Google 发布 Android 软件的新版本或更新时,相应的 SDK 也会随之发布。在更新或新版本的 SDK 中,增加了一些以前版本中没有的功能。Android SDK 包含一些对于 Android 应用程序开发非常重要的工具。这些工具提供了从开发到调试的顺畅的开发流程。Android SDK 兼容所有操作系统,如 Windows、Linux、macOS 等。

成分:

  • Android SDK 构建工具。
  • 安卓模拟器。
  • Android SDK 平台工具。
  • Android SDK 工具。

要了解更多信息,请参阅文章: Android的SDK及其组件

18.Android常见面试题和答案合集 - 安卓的缺点

  • 碎片化为用户体验提供了一种非常直观的方法,但它也有一些缺点,开发团队需要时间来适应市场上现有的移动智能手机的各种屏幕尺寸,并调用应用程序中的特定功能。
  • Android 设备可能会有很大差异。因此,应用程序的测试变得更加困难。
  • 随着开发和测试花费更多时间,应用程序的成本可能会增加,具体取决于应用程序的复杂性和功能。

19. 简要解释活动生命周期。

这些是活动生命周期的不同阶段:

前50个Android面试问题和答案 – SDE I 到 SDE III
  • onCreate():首次创建活动时调用。这是完成所有静态工作的地方,例如创建视图、将数据绑定到列表等。
  • onStart():当活动对用户可见时调用它。如果活动是从后台调用的,则紧随其后的是 onResume()。
  • onRestart():在活动停止之后和开始阶段之前调用它,因此当任何活动从后台恢复到屏幕上时,它总是跟在 onStart() 之后。
  • onResume():当活动开始与用户交互时调用它。此时,活动位于活动堆栈的顶部,有用户与之交互。
  • onPause():当活动进入后台但尚未被终止时调用它。它是 onResume() 的对应物
  • onStop():当活动对用户不可见时调用。当活动从后台撤消时,紧接着是 onRestart(),当活动关闭或完成时,紧接着是 onDestroy(),当活动仅留在后台时,什么也不做。
  • onDestroy():在活动被销毁之前收到的最终调用。这可能是因为活动正在完成(调用 finish() 时)或因为系统暂时销毁活动的此实例以节省空间。

要了解更多信息,请参阅相应的文章:活动的生命周期中的Android与演示应用

20、为什么需要在Activity类的onCreate()中调用setContentView()? 

Android有哪些最新面试题?这样做的原因是在活动生命周期中 onCreate() 方法只被调用一次。这就是我们需要在 onCreate() 中调用 setContentView() 的重要原因。并且在 onResume()、onStart() 和其他地方调用此函数将是低效的,因为这些方法被多次调用。 

21. 简要解释片段生命周期。

这些是活动生命周期的不同阶段:

前50个Android面试问题和答案 – SDE I 到 SDE III
方法描述
onAttach()当片段与活动相关联时要调用的第一个方法。此方法在片段的生命周期内仅执行一次。  
在创建()此方法通过添加所有必需的属性和组件来初始化片段。
onCreateView()系统调用此方法来创建片段的用户界面。Fragment 的布局的根作为 View 组件通过此方法返回以绘制 UI。
onActivityCreated()它表示已经创建了片段所在的活动。片段的视图层次结构也在此函数调用之前实例化。 
开始()系统调用此方法使片段在用户设备上可见。
onResume()调用此方法使可见片段具有交互性。
暂停()它表明用户正在离开片段。系统调用此方法来提交对片段所做的更改。 
停止()从用户屏幕终止片段的功能和可见性的方法。 
onDestroyView()系统调用此方法来清理各种资源以及与片段关联的视图层次结构。
销毁()调用它来执行片段状态及其生命周期的最终清理。
分离()系统执行此方法以将片段与其宿主活动分离。

要了解更多信息,请参阅相应的文章:片段生命周期中的Android

22. Fragment 和 Activity 有什么区别?

活动分段
Activity 是一个应用程序组件,它提供了一个用户可以交互的用户界面。 片段只是活动的一部分,它基本上将其 UI 贡献给该活动。
活动不依赖于片段 片段依赖于活动。它不能独立存在。
我们需要在 manifest.xml 文件中提及它的所有活动 不需要在清单文件中提及 Fragment
我们无法在活动中不使用片段来创建多屏 UI,在单个活动中使用多个片段后,我们可以创建一个多屏 UI。
Activity 可以在没有 Fragment 的情况下存在  没有活动就不能使用片段。
仅使用 Activity 创建项目则难以管理在项目中使用片段时,项目结构会很好,我们可以轻松处理。
生命周期方法由操作系统托管。活动有自己的生命周期。片段中的生命周期方法通过托管活动来托管。
活动不是轻量级的。 片段是轻量级。

要了解更多信息,请参阅相应的文章:差异片段,并在Android中的活动性

23. Android 中的上下文是什么?

Android 中的上下文可以理解为为我们提供应用程序当前状态上下文的东西。我们可以将上下文及其使用分为三个主要点: 

  • 它允许我们访问资源。
  • 它允许我们通过发送消息与其他 Android 组件进行交互。
  • 它为你提供有关应用程序环境的信息。

Android 中主要有两种类型的上下文可用。 

  1. 应用程序上下文和
  2. 活动上下文

要了解更多信息,请参阅文章: 什么是语境的Android?

24. Android 中的顶级图像加载库。

  • Picasso
  • Glide
  • Fresco
  • COIL(协程图像加载器)
  • UIL(通用图像加载器)

要了解更多信息,请参阅相应的文章:顶部图片加载图书馆的Android

25.什么是Android中的View?

视图是表示 UI 组件的基本构建块的类。一个 View 在屏幕上占据一个矩形区域,负责绘制和事件处理。它是所有 UI 组件的超类。最常见的 UI 组件是:

  • 文本视图
  • 编辑文本
  • 图像视图
  • 按钮
  • 进度条
  • 复选框等

26.Android中View和ViewGroup的区别

  看法                                                      视图组
View 是一个简单的矩形框,可以响应用户的操作。ViewGroup 是不可见的容器。它拥有 View 和 ViewGroup
View 是所有组件的 SuperClass,如 TextView、EditText、ListView 等ViewGroup 是 Views(TextView、EditText、ListView 等)的集合,有点像一个容器。
View 对象是用户界面 (UI) 的一个组件,如按钮或文本框,也称为小部件。一个 ViewGroup 对象是一个布局,即其他 ViewGroup 对象(布局)和 View 对象(小部件)的容器
示例有 EditText、Button、CheckBox 等。例如,LinearLayout 是包含 Button(View) 和其他 Layouts 的 ViewGroup。
View指的是android.view.View类ViewGroup 指的是 android.view.ViewGroup 类
android.view.View 是所有 UI 类的基类。ViewGroup 是布局的基类。

要了解更多信息,请参阅相应的文章:差异观之间的ViewGroup Android中

27. 什么是 Android 上的 Kotlin 协程?

Kotlin 团队将协程定义为“轻量级线程”。它们是实际线程可以执行的任务。Kotlin 协程引入了一种新的并发风格,可用于 Android 以简化异步代码。官方文档说协程是轻量级线程。轻量级 意味着创建协程不会分配新线程。相反,他们使用预定义的线程池和智能调度来确定接下来执行哪些任务以及稍后执行哪些任务

要了解更多信息,请参阅相应的文章:科特林协同程序在Android

28. 垃圾收集器在 Android 中是如何工作的?

Android 中的垃圾收集器没有压缩。这意味着堆中对象的地址在它们创建后永远不会改变。因此,当分配失败时可以触发垃圾收集

  • OutOfMemoryError 即将被触发,
  • 当堆的大小达到某个软限制时,
  • 明确请求 GC 时。

29. 描述你上一个应用程序的架构。

Android有哪些最新面试题?当开发人员开发一个真正的移动应用程序时,它的性质是动态的,并且会根据用户的需要扩展其功能,那么就不可能在活动或片段中编写核心逻辑。为了构建项目的代码并为其提供模块化设计(分离的代码部分),应用架构模式来分离关注点。开发人员使用的最流行的 android 架构如下:

  • MVC(模型—视图—控制器)
  • MVP(模型 — 视图 — 演示者)
  • MVVM(模型—视图—视图模型)

所以你必须告诉你在大学时期的项目中或在一个真正的行业项目中开发的最后一个应用程序的架构。

要了解更多信息,请参阅文章: Android的架构模式

30.MVC vs MVP vs MVVM架构,我们应该选择哪一个?

Android常见面试题和答案合集介绍:

MVC(模型视图控制器)MVP(模型查看演示者)MVVM(模型视图视图模型)
最古老的软件架构之一作为软件架构的第二次迭代开发,它是从 MVC 发展而来的。行业认可的应用程序架构模式。
UI(视图)和数据访问机制(模型)是紧密耦合的。它通过使用Presenter作为ModelView之间的通信通道解决了具有依赖View的问题。 这种架构模式更受事件驱动,因为它使用数据绑定,因此可以轻松地将核心业务逻辑View分离。
控制器视图以一对多的关系存在。一个控制器可以根据所需的操作选择不同的视图。PresenterView之间存在一对一的关系,因为一个 Presenter 类一次管理一个 View。多个View可以映射到单个ViewModel,因此 View 和 ViewModel 之间存在一对多关系。

我们应该选择哪一个?

  • MVC: 仅适用于小型项目。
  • MVP: 适用于简单和复杂的应用程序。
  • MVVM: 非常适合大型项目。但不适合小型项目。

要了解更多信息,请参阅相应的文章: 差异MVC,MVP和MVVM架构模式之间的Android

31. 如何在android中减少APK的大小?

  • 删除未使用的源
  • 矢量绘图的使用
  • 重用你的代码
  • 压缩 PNG 和 JPEG 文件
  • 皮棉的使用
  • 使用 WebP 文件格式的图像
  • 使用proguard
  • ShrinkResources 的使用
  • 限制使用外部库
  • 使用 Android 尺寸分析器工具
  • 生成 App Bundle 而不是 APK
  • 使用重新配置

要了解更多信息,请参阅文章:如何减少APK大小的Android?

32. Android 喷气背包及其主要优点是什么?

Android面试问题和答案:Jetpack 只是一组软件组件、库、工具和指南,可帮助开发出色的 Android 应用程序。Google于 2018 年推出了Android JetpackAndroid Jetpack的主要优势

  • 通过其组件形成应用程序架构的推荐方式
  • 消除样板代码
  • 简化复杂的任务
  • 提供向后兼容性,因为支持等库从 Android API 中分离出来并重新打包到androidx.* 包
  • Kotlin 集成的内置生产力功能

要了解更多信息,请参阅文章: 介绍到Android的Jetpack

33. Android Jetpack 有哪些不同的软件组件?

Android Jetpack 的软件组件分为 4 类:

  • 基础组件: AppCompat、Android KTX、Test、Multidex
  • 架构组件: Room、WorkManager、Lifecycle、ViewModel、Paging、Navigation
  • 行为组件:下载管理器、权限、共享、切片
  • UI 组件:动画和过渡、自动、片段、调色板、布局

34. 什么是 Jetpack Compose 及其优势?

Jetpack Compose 是 Google 最近推出的现代 UI 工具包,用于构建原生 Android UI。它通过更少的代码、Kotlin API 和强大的工具简化并加速了 UI 开发。 

  • 声明式
  • 兼容的
  • 提高开发速度
  • 简洁而惯用的 Kotlin
  • 易于维护
  • 用科特林写的

要了解更多信息,请参阅相应的文章: Jetpack的撰写中的Android

35. Android的架构组件有哪些?

架构组件可以分类如下: 

  • 房间
  • 工作经理
  • 生命周期
  • 视图模型
  • 实时数据
  • 导航
  • 分页
  • 数据绑定

要了解更多信息,请参阅相应的文章:  Jetpack的体系结构组件中的Android

36. 如何提高 Android 中 RecyclerView 的滚动性能?

  • 在 RecyclerView 项中为 ImageView 设置特定的宽度和高度
  • 避免使用 NestedView
  • 使用 setHasFixedsize 方法
  • 使用图片加载库加载图片
  • 在 OnBindViewHolder 方法中做更少的工作
  • 为 RecyclerView 使用 NotifyItem 方法

要了解更多信息,请参阅文章:如何提高RecyclerView滚动性能在Android中?

37. Android 中的 Volley 库

Volley是一个HTTP 库,它使 Android 应用程序的网络变得非常容易和快速。它由 Google 开发并在 2013 年 Google I/O 期间推出。它的开发是因为 Android SDK 中缺少能够在不干扰用户体验的情况下工作的网络类。尽管 Volley 是 Android 开源项目 (AOSP) 的一部分,但谷歌在 2017 年 1 月宣布,Volley 将转移到一个独立的库中。它管理网络请求的处理和缓存,并为开发人员一次又一次地编写相同的网络调用/缓存代码节省了宝贵的时间。

要了解更多信息,请参阅相应的文章:凌空库中的Android

38. 什么是 Android 中的 Retrofit?

Retrofit 是由 square 为 Android 和 Java 构建的类型安全 REST 客户端,旨在简化 RESTful Web 服务的扩展。Retrofit 使用 OkHttp 作为系统的管理层,并以此为基础。Retrofit 自然地使用 POJO (PlainOldJavaObject) 序列化 JSON 反应,该 POJO 必须具有 JSON 结构的前沿特征。要序列化 ​​JSON,我们需要一个转换器先将其转换为 Gson。Retrofit 比其他库简单得多,我们不必解析 JSON,它直接返回对象,但有一个缺点,它不支持从服务器加载图像,但我们可以使用 Picasso。 

要了解更多信息,请参阅文章:介绍改造

39. 描述 MVVM

Model — View — ViewModel (MVVM)是业界公认的软件架构模式,它克服了 MVP 和 MVC 设计模式的所有缺点。MVVM 建议将数据呈现逻辑(视图或 UI)与应用程序的核心业务逻辑部分分开。 

MVVM 的独立代码层是:

  • Model:这一层负责数据源的抽象。Model 和 ViewModel 协同工作以获取和保存数据。
  • View:这一层的目的是通知 ViewModel 用户的操作。该层观察 ViewModel,不包含任何类型的应用程序逻辑。
  • ViewModel:它公开那些与视图相关的数据流。此外,它充当模型和视图之间的链接。

要了解更多信息,请参阅相应的文章: MVVM(模型视图视图模型)建筑格局的Android

40.你的Android应用程序是legging的原因是什么?

  • 你在主线程上做的太多了
  • 你的资产文件很大
  • 你使用的是过时的 SDK 版本
  • 你正在使用错误的库
  • 网络速度
  • 闲聊
  • 你的代码效率低下

要了解更多信息,请参阅相应的文章:什么是你的Android应用是裹腿的原因是什么?

41.什么是AIDL?

在 Android 上,处理器发生的情况是一个进程通常无法访问另一个进程的内存。因此,为了交互,他们需要将对象分解为操作系统可以理解的原语,并跨该边界收集对象。执行该收集的代码编写起来非常复杂,因此 Android 使用 AIDL 处理它。所以通常 AIDL 类似于其他 IDL,它允许定义客户端和服务都同意的编程接口,以便使用进程间通信 (IPC) 相互交互。

42.什么是 ANR 以及如何在 Android 中防止它?

ANR 代表应用程序无响应。如果你在 UI 线程上运行一个需要很长时间(通常大约 5 秒)的进程,则会发生 ANR 。在这一点上,GUI(图形用户界面)将锁定,这可能会导致用户按下的任何操作都不会被执行。大约 5 秒后。已发生,如果线程仍未恢复,则会显示 ANR 对话框,通知用户设备没有响应,并且可以让用户选择等待,希望应用程序最终恢复,或者强制关闭应用程序。

停止在主线程上执行繁重的任务。相反,只需使用工作线程,例如 IntentService、AsyncTask Handler 或另一个线程。如果是永久块(例如,死锁获取一些锁),则检测 ANR 发生的位置很简单,但如果只是短暂的延迟,则更难。首先,重新评估你的代码和外观是否存在漏洞和长时间运行的操作。

要了解更多信息,请参阅文章:什么是ANR以及它如何在Android中可以预防吗?

43. 什么是 Android NDK,它为什么有用?

NDK(本机开发工具包)是一种工具,允许你使用 C/C++ 为 Android 设备进行编程。它提供了平台库,可用于管理本机活动和访问物理设备组件,例如传感器和触摸输入。NDK 在你需要执行以下一项或多项操作的情况下非常有用:

  • 从设备中榨取额外的性能以实现低延迟或运行计算密集型应用程序,例如游戏或物理模拟。
  • 重用你自己或其他开发人员的 C 或 C++ 库。

44. 简要解释 JUnit 测试。

JUnit是Java 应用程序的“单元测试”框架,默认情况下已包含在 android studio 中。它是单元和 UI 测试的自动化框架。它包含注释,比如@测试, @Before@After等等,下面我们将只使用@Test注释,以保持物品容易理解。

要了解更多信息,请参阅:本文使用JUnit单元测试的Android

45. 什么是 Dagger 以及何时使用 Dagger?

Dagger 是一个依赖注入框架,它会为你生成大量的样板代码来实现Android 开发中依赖注入的目标。在回答这个问题之前,并不是说必须对依赖注入有很好的了解。 

什么时候用匕首?

项目规模小的中等的大的
使用工具手动 DI 服务定位器 Dagger匕首匕首

46. 什么是Android架构组件中的LiveData及其优势?

LiveData 组件是一个可观察的数据持有者类,即可以观察包含的值。LiveData 是一个生命周期感知组件,因此它根据其他应用程序组件的生命周期状态执行其功能。此外,如果观察者的生命周期状态处于活动状态,即 STARTED 或 RESUMED,则只有 LiveData 更新应用程序组件。LiveData 总是在进行任何更新之前检查观察者的状态,以确保观察者必须处于活动状态才能接收它。如果观察者的生命周期状态被破坏,LiveData 能够删除它,从而避免内存泄漏。它使数据同步的任务更容易。

前50个Android面试问题和答案 – SDE I 到 SDE III

LiveData 组件的优点:

  • UI 根据数据中的相应更改进行更新
  • 它删除停止或销毁的活动,以减少应用程序崩溃的机会
  • 没有内存泄漏,因为 LiveData 是一个生命周期感知组件。

要了解更多信息,请参阅相应的文章: Jetpack的体系结构组件中的Android

47.什么是Android中的数据绑定?

数据绑定库是一个支持库,它提供了将活动/片段中的 UI 组件绑定到应用程序数据源的功能。库以声明性格式而不是以编程方式执行此绑定任务。下面是一个准确理解这个库的工作的例子:

要查找 TextView 小部件并将其绑定到 ViewModel 变量的 userName 属性,请调用findViewById()方法:

TextView textView = findViewById(R.id.sample_text);

textView.setText(viewModel.getUserName());

使用Data Binding库后,上面的代码通过使用赋值表达式改变如下:

<文本视图

 android:text="@{viewmodel.userName}" />

数据绑定组件的优点:

  • 通过删除活动中调用的 UI 框架,使代码更简单且易于维护。
  • 允许类和方法观察数据的变化
  • 允许创建对象并填充它作为可观察的集合。

要了解更多信息,请参阅相应的文章: Jetpack的体系结构组件中的Android

48. Android 架构组件中的 Room。

Android有哪些最新面试题?Android 中对数据库的要求从一开始就由 SQLite 满足。然而,它有一些严重的缺点,比如在编译时不检查查询,它不保存普通的 Java 对象(通常称为 POJO)。开发人员还需要编写大量样板代码,才能使 SQLite 数据库在 Android OS 环境中工作。Room 组件作为SQLite 对象映射库出现,它克服了所有提到的挑战。Room 将查询直接转换为对象,在编译时检查查询中的错误,并且还能够持久化 Java POJO。 

此外,它会根据给定的查询结果生成 LiveData 结果/可观察值。由于 Room 组件的这种通用性,Google 官方支持并推荐开发者使用它。房间由以下子组件组成:

  1. 实体:它是带注释的类,Room 在数据库中为其创建表。类的字段代表表中的列。
  2. DAO(Data Access Object):负责定义访问数据库和执行操作的方法。
  3. 数据库:它是一个抽象类,它扩展了RoomDatabase类,它作为底层应用程序关系数据的主要访问点。
前50个Android面试问题和答案 – SDE I 到 SDE III
Android常见面试题和答案合集

要了解更多信息,请参阅相应的文章: Jetpack的体系结构组件中的Android

49. Android 中的 ViewModel。

Android常见面试题和答案合集:ViewModel 是 Android Jetpack 架构组件中最关键的类之一,支持 UI 组件的数据。它的目的是保存和管理 UI 相关的数据。此外,它的主要功能是保持完整性并允许数据在屏幕旋转等配置更改期间提供服务。Android 设备中的任何类型的配置更改都倾向于重新创建应用程序的整个活动。这意味着如果数据没有从被破坏的活动中正确保存和恢复,数据将会丢失。为避免这些问题,建议将所有 UI 数据存储在 ViewModel 而不是活动中。 

前50个Android面试问题和答案 – SDE I 到 SDE III

要了解更多信息,请参阅相应的文章: Jetpack的体系结构组件中的Android

50.什么是安卓KTX?

Android面试问题和答案:KTX 库是唯一一个在 Jetpack 发布时首次引入的基础组件。Android KTX 是 Kotlin 扩展的集合,旨在帮助开发人员在使用 Kotlin 语言开发 Android 应用程序时删除样板代码以及编写简洁的代码。这里名称中的KTX代表Kotlin Extensions。下面是一段未使用和使用Android KTX库后的代码示例:

不使用 KTX 库的 SQLite 代码片段:

db.beginTransaction()

try {




// insert data

db.setTransactionSuccessful()

}  

finally {

db.endTransaction()

}

使用KTX库后的以上代码:

db.transaction {

   // insert data

}

要了解更多信息,请参阅相应的文章:安卓Jetpack的基础组件

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: