专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
开发者全社区  ·  97岁李嘉诚 ·  13 小时前  
开发者全社区  ·  字节跳动出手:直接辞退353人! ·  昨天  
开发者全社区  ·  yc女同学的朋友圈 ·  2 天前  
开发者全社区  ·  社死!deepseek受害者出现... ·  2 天前  
51好读  ›  专栏  ›  安卓开发精选

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

安卓开发精选  · 公众号  · android  · 2021-01-20 10:05

正文




简介



Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写优质应用。这些组件可以帮助开发者遵循最佳做法、让开发者摆脱编写样板代码的工作并简化复杂任务,以便开发者将精力集中放在所需的代码上。



Android Jetpack组件的作用



  • Navigation:一个用于管理Fragment切换的工具类,可视化、可绑定控件、支持动画等是其优点。

  • Dat a Bi nding: 不用说,都知道,加速MVVM的创建。

  • Lifecycle:他是我们能够处理Activity和Fragment的生命周期的重要原因,在AndroidX的Fragment和Activity已经对Lifecycle提供了默认支持。

  • ViewModel:当做MVVM的ViewModel层,并具有声明周期意识的处理和UI相关的数据。

  • LiveData:同RxJava的作用一样,对数据进行监听,优点就是无需处理生命周期、无内存泄漏等。

  • Room:强大的ORM数据库框架。

  • Paging:易于使用的数据分页库,支持RecyclerView。WorkManager:灵活、简单、延迟和保证执行的后台任务处理库。



你可能选择Android Jetpack的原因



  • 一起使用更方便:因为Android Jetpack组件中的很多库都对其他库提供了支持,比如Room和Paging就对LiveData提供了支持。

  • 向后兼容:基本上每个组件都对低版本提供了支持。

  • 支持RxJava:由于RxJava强大的生态环境,几乎和数据相关的组件都对RxJava提供了支持。

  • 减少代码量:以Data Binding + ViewModel + LiveData或RxJava构建的MVVM模式能够显著减少代码量,比较平时使用的MVP模式也会更加方便,无需主动更新UI。

  • 无需捆绑:Android Jetpack系列组件可以无需捆绑使用,你如果只想用里面的单个库,那么就可以仅仅依赖一个库。



Android Jetpack要学吗?



学,肯定要学,Android Jetpack于谷歌而言,这是他们重新整理和统一安卓生态环境决心的体现,Android Jetpack所展现的内容,也是谷歌想拓展和维护的方向。于长期苦恼于第三方库选择的广大Android开发者而言,这是谷歌为我们提供的一盏明灯。

也许,Android Jetpack系列的部分库还没成熟到成为你工作的第一选择,但是,深入学习Android 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(R.id.sample_text).apply {
   text = viewModel.userName
}

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

    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

目录







请到「今天看啥」查看全文