面试官:作为一名Android开发者,连jetpack都不懂?你还是改行吧!

Android App开发之Jetpack架构 还记得15年那个时候,好像Android就是解析数据,列表展示,了解下四大组件生命周期,已经可以干活了,还记得当年一个View只要能滑动,就大呼自定义控件牛逼。 不过,近几年的变化颇大。 为了丰富大家日常开发的UI效果效果: Material Design进入大家的视野,后面陆陆续续涌现出一大批UI组件:DrawerLayout,AppbarLayout,CoordinateLayout,ToolBar,NestedScrollView,FlexBoxLayout等... 在UI组件日益完善的同时,也 阅读详情

JetPack自2018年面世,迎来了它的第三个年头。但是在国内的受欢迎程度远远及不上国外,国内开发者一听到别人说JetPack,脑海中蹦出来的词就是“不成熟”、“不好用”、“调试有点难”,但是事实真的是如此嘛?

我们首先来看看JetPack在发布的时候的雄心壮志:

以上来自谷歌语录,总结起来就是:

  1. JetPack是一整套组件库

  2. 它能帮我们写出优质应用

  3. 它能让我们不需要去写毫无营养的样板代码

4. 它能规范我们的开发行为

接下来来看看JetPack组件库到底包含了哪些组件:

从上图我们可以看出,JetPack组件库主要分为四个部分,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。其中用的比较多的是DataBinding、LiveData、Paging、Room、ViewModel、Lifecycles。

但为什么国内的开发者很难接受呢?其实大概可以分析出几点原因:

  1. 对新技术的嗅觉比较迟钝

  2. JetPack单一组件不知道怎么用,在哪里用

  3. 没有完整版的Copy源

  4. 老项目之前没有用JetPack,现在改会牵一发动全身,懒的改,爱谁谁

  5. 对JetPack是什么都不知道

以上几点分析可能有点直击要害,但是确实是事实。其实把以上的原因总结到一起,就是对JetPack不是特别了解,就算用过但对其源码以及底层原理不熟,这就好比你找了一个不太了解的另一半,你会轻易把自己交给他或者她嘛?

正是因为这些原因,导致大家完全忽略了JetPack的强大以及它能给我们带来的改变,接下来我们分析下它能给我们带来什么。

1.解决了 Android 架构问题

由于之前 Google 并没有推出关于 Android 应用程序架构设计的标准,所以各个企业的开发者都需要打磨出一套符合自己项目的开发方案。但是这就会造成两个明显的问题,第一个是这些方案都是野路子出生,没有官方身份、第二个是无法从这些方案中找出一套符合所有人期望的方案。说直白了就是没有统一标准,碎片化严重。所以Google也意识到了这个问题就推出了JetPack,让开发者能够使用标准的架构组件,而不用去纠结架构的方案设计,可以将更多的精力放在自己的业务代码上。

2.提升了代码质量

Jetpack 拥有基于生命周期感知的能力,可以减少内存泄漏、NPE崩溃, 为我们开发出健壮且流畅的程序提供强力保障,同时样板代码的自动生成可以让人为遗留BUG减少。

3.提升了开发效率

Jetpack 可以减少样板代码,有助于提升 Android 开发的效率。 这些组件可以单独使用,也可以组合使用,并且在不同 Android 版本中运行一致。

看到这些JetPack带来的改变,难道大家还能放任不管嘛,还能不动心?接下来我们从实际工作岗位需求出发:

看到这里大家应该已经明白了,JetPack现在在很多的岗位需求中都明确了,也意味着以后的面试过程中除了以前的知识点,又出现了JetPack。

说到这里,接下来我们聊聊如何去学JetPack,很多人平时在开发中都是一通复制粘贴,不屑了解原理,但是JetPack你如果不知晓原理你会发现很容易出现人为错误,这就回到了最开始的问题,很多人觉得JetPack问题多,实际上,并不是,而是你对它的了解不够深而已。所以,要学,就要学透,要把它们的原理全部搞懂,而不仅仅是停留在用的层面。

如何学习?

如果你是因为缺少学习资料,而我正好薅到这本阿里巴巴内部Jetpack宝典,从入门到精通,教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门,是你学习Jetpack的葵花宝典。

朋友们如果有需要全套《Jetpack架构组件从入门到精通》,直接划到文末免费领取哦~

Android Jetpack - Navigation

Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构。应用内Fragment页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。


Android Jetpack - Data Binding

Data Binding 是一个支持库,它使用一种 声明的方式 代替 编码的方式,用来绑定 UI 控件和数据源。
通常我们会在 activity 里面调用 UI 框架层的方法声明 view。例如,下面的代码调用了 findViewById() 声明了一个 TextView 控件,并且把它和 viewModel 的 userName 属性进行了绑定:

findViewById<TextView>(R.id.sample_text).apply {
    text = viewModel.userName
}

下面的代码展示了如何使用 Data Binding 在布局里面直接给 TextView 的 test 属性进行赋值。这么做的好处是不必再像上面的例子一样调用 Java 代码。注意在赋值表达式中使用的语法是 @{}:

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

在布局里面直接绑定 UI 控件,可以减少在 activity 中 UI 框架方法的调用,这使得代码更加简洁、更容易维护。它还可以提升 App 的性能,避免内存泄漏和空指针异常。


Android Jetpack - ViewModel & LiveData

ViewModel将视图和逻辑进行了分离。Activity或者Fragment只负责UI显示部分。具体的网络请求或者数据库操作则有ViewModel负责。类似于MVP模式中的Presenter层。ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据。让数据可在发生屏幕旋转等配置更改后继续留存。我们知道类似旋转屏幕等配置项改变会导致我们的 Activity 被销毁并重建,此时 Activity 持有的数据就会跟随着丢失,而ViewModel 则并不会被销毁,从而能够帮助我们在这个过程中保存数据。并且ViewModel不持有View层的实例,通过LiveData与Activity或者Fragment通讯,不用担心潜在的内存泄漏问题。

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保LiveData当数据源发生变化的时候,通知它的观察者更新UI界面。同时它只会通知处于Active状态的观察者更新界面,如果某个观察者的状态处于Paused或Destroyed时那么它将不会收到通知。所以不用担心内存泄漏问题。


Android Jetpack - Room

Room是Jetpack组件库一员,属于ORM库,主要是对Sqlite做了一层抽象,从而简化开发者对数据库操作。Room支持编译时的语法检查,并且支持返回LiveData。

添加依赖

在app的build.gradle中添加如下依赖:

def room_version = "2.2.0-rc01"

implementation "androidx.room:room-runtime:$room_version"
// For Kotlin use kapt instead of annotationProcessor (注意这个注释)
kapt "androidx.room:room-compiler:$room_version"

如果项目是使用Kotlin语言来开发的,在添加room-compiler的时候使用kapt关键字,java语言开发的就使用annotationProcessor关键。否则会导致访问出错。

Android Jetpack - Paging

很多应用程序从包含大量项目的数据源中获取数据,但一次只显示一小部分数据。加载应用程序中显示的数据可能很大并且代价高昂,因此要避免一次下载,创建或呈现太多数据。为了可以更轻松地在我们的应用程序中逐渐加载数据谷歌方法提供了这个组件,可以很容易地加载和现在的大数据集与我们的RecyclerView快速,无限滚动。它可以从本地存储,网络或两者加载分页数据,并且可以让我们自定义如何加载内容。它可以与Room,LiveData和RxJava一起使用。

Paging Libray分为三部分:DataSource, PagedList, PagedAdapter

Android Jetpack - WorkManger

WorkManager是Android Jetpack 中管理后台任务的组件。

常见的使用场景:1.向后端服务发送日志或分析数据 2.定期将应用数据与服务器同步

使用 WorkManager API 可以轻松地调度后台任务。可延迟运行(即不需要立即运行)并且在应用退出(进程未关闭)或应用重启时能够可靠运行的任务。

Android Jetpack架构组件之Lifecycle

为了应用的安全,经常会有从后台切回前台时进行软件确认等安全确认处理的需求。如果是以前的话,这个需求其实是挺难实现的。 但自从Google推出Lifecycle组件以后,这个需求就简单了很多。Lifecycle除了感知从后台切回前台以外, 利用这个组件可以更简单的实现复杂的处理生命周期的操作


Android Jetpack Compose 最全上手指南

Jetpack Compose 是一个用于构建原生Android UI 的现代化工具包,它基于声明式的编程模型,因此你可以简单地描述UI的外观,而Compose则负责其余的工作-当状态发生改变时,你的UI将自动更新。由于Compose基于Kotlin构建,因此可以与Java编程语言完全互操作,并且可以直接访问所有AndroidJetpack API。它与现有的UI工具包也是完全兼容的,因此你可以混合原来的View和现在新的View,并且从一开始就使用Material和动画进行设计。

结语

由于文章篇幅有限,仅展示一部分内容,此份笔记还包含 Android Jetpack架构组件–App Startup、Android Jetpack最新组件介绍、Android Jetpack项目实战(从0搭建Jetpack版的WanAndroid客户端)、项目实战等等。

如果正好有需要这份资料的朋友,可以直接点此处免费获取。

更多Android架构相关资料和面试专题可以点此处查看。

超过80%大厂都在用,Jetpack Compose现代Android界面开发的未来 Jetpack Compose是一款全新的Android UI工具包,旨在简化和改进Android应用程序的界面开发过程。与传统的XML布局文件和Java代码相比,Jetpack Compose采用了声明式的方式来构建用户界面。通过使用Kotlin编程语言,Jetpack Compose提供了一种更简洁、更直观的UI开发体验。Jetpack Compose是一个基于函数式编程模型的UI框架,它允许开发者以声明式的方式描述界面的外观和行为。 阅读详情

相关推荐

双目视觉三维重构(一)————简介

优快云中关于立三维重构的介绍层出不穷,CNKI中也有各类综述对三维重构进行总结,撰写这篇博客仅作为本人对该类博客、论文的总结学习,加深自身学习的印象、作为学习的笔记。如有错误的地方,欢迎指正。   1、三维重构 1.1、三维重构到底是什么?   首先要了解立体匹配算法,首先要知道立体匹配算法主要具体应用于什么方向。 三维重构又被称为三维重建,百度百科中对它的定义为:指对三维物体建立适合...

qq_39634612的博客 1万+

阿里巴巴内部Jetpack宝典意外流出!极致经典,堪称Android架构组件的天花板

简介 Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。 Android Jetpack组件的作用是什么? Navigation:一个用于管理Fragment切换的工具类,可视化、可绑定控件、支持动画等是其优点。 Data Binding:不用说,都知道,加速MVVM的创建。 Lifecycle:他是我们能够处理Activity和Fragment的生命周.

zhireshini233的博客 3056

Windows下Colmap编译安装全攻略:从Boost到CUDA的避坑指南

本文详细介绍了在Windows系统下编译安装Colmap三维重建工具的完整流程与实战经验。针对Boost库版本兼容性、CUDA与Visual Studio的版本匹配等常见难题提供了具体的避坑指南和解决方案,帮助开发者高效完成从环境配置到最终部署的全过程。

weixin_28235513的博客 198

Android 大厂用 Jetpack Compose 框架用的多吗?

如果一直关注Jetpack Compose 的发展的话,可以明显感受到 2022 年和 2023 年的 Jetpack Compose 使用讨论的声音已经完全不一样了, 2022 年还多是观望,2023 年就有很多团队开始采纳Jetpack Compose来进行开发了。不过也有很多同学接触了下 Jetpack Compose,然后就放弃了。要么使用起来贼特么不顺手,要么就是感觉性能不行,卡。其实,问题只是大家的思维没有转换过来,还不会写Jetpack Compose。Scaffold。

xiaokangss的博客 2120

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4917

使用MATLAB实现PAC2002轮胎模型的TIR文件解析和模型计算详解

PAC2002轮胎模型是由荷兰TNO公司开发的一种半经验的轮胎模型,用于描述轮胎在不同工况下的力学特性。该模型基于一系列物理和经验参数,通过复杂的数学表达式来模拟轮胎的力学行为,包括纵向力、侧向力、回正力矩等。

qq_38334677的博客 2428

谷歌十年磨一剑,Jetpack Compose 从入门到精通,给出最美好的答案

前言 Android已经十年多了,传统的Android UI ToolKit有很多历史遗留问题,而有些官方也很难修改。比如View.java有三万多行代码,比如Combo box竟然叫Spinner,再比如Button继承自Textview。同时官方的一些widget修复依赖系统升级,到达用户周期过长。 通过在Jetpack中添加Compose,脱离了Android系统,代码修复可以更快地到达用户。 而对国内开发者来说,更统一的代码,意味着没有厂商定制。这几天有位同事说『哪个大佬有时间重写个editText

老皮的博客 2636

手机银行应用架构设计

网上银行借助互联网、移动通信网络等技术向客户提供金融服务,易受到通讯层面的安全威胁,金融机构应从通讯协议、安全认证、通信链路安全等层面,采取措施有效应对相关风险。网上银行系统服务器端提供网上银行应用服务和核心业务处理功能,金融机构应充分利用物理环境、通信网络、计算环境等领域的防护技术,在攻击者和受保护的资源间建立多道严密的安全防线。 网上银行除直接向用户提供金融服务外,也可能与外部机构开展业务合作。在网上银行系统设计、开发、部署和运营过程中,应充分考虑外部机构的系统可能存在的安全风险,并针对各类风险进行有效

银行信息系统应用架构详解 4828

专注十年Android界面开发工程师,告诉你Jetpack Compose到底有多好用

业务开发上,目前 Android 技术发展已经进入存量阶段,现在已经很难再出现一款框架或是技术,来颠覆我们项目的生产,Compose 的推出,无疑是给 Android 生态增添了一份生机。对于要不要使用 Compose 这个问题,我的建议是:先尝试了解,学习官方文档,然后尝试写一些 Demo,对照着公司的项目,用 Compose 去仿写几个页面,如果整体问题不大的话,可以尝试对公司项目的二三级页面进行改造,然后通过性能监控或是用户反馈的方式,来收集一些意见。...

老皮的博客 731

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 885

CloudCompare 多窗口联动显示点云

CloudCompare支持多窗口联动显示多个点云数据,可以用来比对原始点云数据与语义分割后的结果。 一、创建多个视窗 打开CloudCompare后会默认有一个视图,我们要同时打开两个数据就需要再创建一个视图,选择菜单栏里的3D Views,在下拉菜单中点击new,这样就创建了一个新的视图,这时3D Views的下拉菜单中有3D View 1和3D View 2两个视图,然后点击3D Views下拉菜单中的Title,这时在数据展示区就会出现两个并列的窗口。 二、分别加载点云数据 将数据分别拖进两个

zhaoguanhua的博客 2739

面试官:作为一名Android开发者,连jetpack都不懂?你还是改行吧

什么是 Jetpack Jetpack 是一个丰富的组件库,它的组件库按类别分为 4 类,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。每个组件都给用户提供了一个标准,能够帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者能够集中精力编写重要的业务代码。 Jetpack 的优势 解决了 Android 架构问题 由于之前 Google 并没有推

xiaokangss的博客 207

Google Earth Engine——使用STARFM 图像融合算法将Landsat 和 MODIS 融合得出2000-2023 NDVI长时序图(空间分辨率为 30 米、时间分辨率为 16 天)

非本地入侵物种是全球生态系统面临的主要威胁之一。野葛(Pueraria montana)是一种生长迅速的藤本植物,原产于亚洲,现已入侵美国一些地区,因此该物种的管理成为一个重要问题。利用 Landsat 和 MODIS 平台收集的数据,计算了 2000 年至 2015 年肯塔基州三个侵扰地点的归一化差异植被指数(NDVI)估算值。使用 STARFM 图像融合算法将大地遥感卫星和 MODIS 得出的 NDVI 结合成空间分辨率为 30 米、时间分辨率为 16 天的时间序列。

此星光明博客 2509

2024年Android最全Android Sunflower 带您玩转 Jetpack,阿里面试官必问

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。不断奔跑,你就知道学习的意义所在!

2401_84545804的博客 1047

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

如何应对 Android 面试官 -> 玩转 Jetpack Paging

Paging分页组件摘要 Paging是Jetpack提供的分页组件,用于在RecyclerView中优雅地分页加载数据,减少网络和系统资源消耗。核心优势包括: 增量加载数据,避免一次性加载过多 数据更新时仍保持流畅响应 高效利用资源,按需加载 核心使用步骤 定义数据源DataSource(PositionalDataSource/PageKeyedDataSource/ItemKeyedDataSource) 创建数据工厂DataSource.Factory 使用PagedListAdapter替代Rec

IT_Android的博客 1144

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何应对 Android 面试官 -> 玩转 Jetpack WorkManager

WorkManager是Android Jetpack提供的后台任务管理组件,适用于需要保证执行的非即时性任务。它能够自动选择最佳执行方式(JobScheduler/Firebase JobDispatcher/AlarmManager),确保任务在应用退出或设备重启后仍能执行。主要特点包括跨API版本兼容、电量优化和任务管理,但不支持保活操作。使用步骤包括:1)继承Worker类实现任务逻辑;2)通过WorkManager.enqueue()启动任务。支持Activity与Worker之间的双向数据传递:

IT_Android的博客 1062

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何应对 Android 面试官 -> 玩转 Jetpack ViewModel

本文介绍了Android开发中ViewModel的基础使用和原理。ViewModel作为数据容器,可以在配置变化时保持数据稳定,减轻Activity负担,并在多个组件间共享数据。文章通过一个拨号键盘Demo展示了ViewModel结合LiveData、DataBinding和Lifecycle的使用方式:继承ViewModel类存储数据,通过ViewModelProvider获取实例,在布局文件中绑定数据,实现数据持久化和界面更新。Demo还演示了ViewModel如何保存拨号状态,并通过系统API实现拨号

IT_Android的博客 1107

Android App开发之Jetpack架构,经验总结

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。

m0_75011249的博客 1060

做Android还不会用Jetpack?你将如何撑过下一次互联网寒冬?

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。还有。

2301_79987255的博客 533
上一篇: 太香了,Android面试主题整理合集
下一篇: 程序员跳来跳去,到底去大公司还是小公司?
紫苏不是菜
博客等级 码龄6年 40粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值