Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

栏目: IOS · Android · 发布时间: 5年前

内容简介:在 Android 诞生的第是个年头,Android手机应用的开发应该变得更加快捷。Google 也一直在聆听开发者的新生,尽力的提高开发者在开发 Android 应用的效率。在去年,我们听到开发者说,Android开发的生命周期管理很困难,所以我们推出了 lifecycle 组件。我们还听到,当你对后台任务进行处理的时候,API 给你了5-6种不同的解决方法,那么哪一种才是你最该使用的呢?为了解决这些问题,Android JetPack诞生了。我们希望 JetPack 不仅能够提供各种功能的API,同时

在 Android 诞生的第是个年头,Android手机应用的开发应该变得更加快捷。Google 也一直在聆听开发者的新生,尽力的提高开发者在开发 Android 应用的效率。在去年,我们听到开发者说,Android开发的生命周期管理很困难,所以我们推出了 lifecycle 组件。我们还听到,当你对后台任务进行处理的时候,API 给你了5-6种不同的解决方法,那么哪一种才是你最该使用的呢?为了解决这些问题,Android JetPack诞生了。

我们希望 JetPack 不仅能够提供各种功能的API,同时,也希望给各位开发者在开发移动应用的时候可以有一个可以依照的蓝图。

Android JetPack是什么以及其组成部分

什么是Android JetPack?Android JetPack是一套组件、 工具 和架构指南,我们将现有的support library和架构组件联系起来。一会儿你们就将看到,这些架构和组件,都是你们非常熟悉和正在使用的。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

Android JetPack由四个部分组成,分别是架构、界面、基础和行为,每个部分的具体组成部分请查看下图

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

去年我们推出的架构组件,在开发者心中获得一致好评,架构组件的优点是,你可以通过使用一个或者几个架构组件,来解决你在开发过程中遇到的问题。在去年的基础上,今天我们又推出的新的架构组件,分别是:WorkManager、Navigation、Paging。Paging已经达到稳定版本,WorkManager和Navigation还处在阿尔法的阶段。

JetPack的第二部分是行为,行为种的大部分组件包含了大家都非常熟悉的组件,例如 Download Manager 可以进行大数据的下载,Media&Playback和Permissions可以帮助大家在音视频的处理和获取权限,Notifications是对推送的处理。这些组件有一个通用的特点:他们都是向后兼容的。

行为中,我们还加入了一个新的组件:Slices。Slices提供给应用的一个新的数据遍历的方式,现在Slices已经在Google Assistant和Google Search中有所体现了。

JetPack的下一个部分是界面,其中包括Fragment、Layout、Palette、Animation&Transitions、Auto.TV & Wear、Emoji等部分。我们希望界面部分不但能够让界面更加好看,同时也希望能够给用户带来好的用户体验。

JetPack的最后一个部分是基础,就像他的名字的一样,它是大家在应用开发过程中必不可少的一部分。我们推出了Kotlin Extensions(KTX)、通过利用 Kotlin 语言自身的特性,例如:扩展函数、属性等,KTX可以帮助大家更好的写出简洁的Kotlin代码。AppCompat是大家都很熟悉的向后兼容库,之前v4和v7在大家的开发过程中带来了不小的麻烦,所以我们对它进行了封装,推出了androidx,大家可以通过使用Android Studio3.2来使用androidx

架构组件

去年,我们推出了一套架构指南,并且有一套组件来完成这个架构指南,通过使用架构组件,可以使你的应用变得更加模块化和易于测试和维护。架构组件的宗旨是:让Android开发更简单。

在去年的GDD上,我们想大家介绍来4个稳定版本的架构组件他们分别是:Lifecycles、LifeData、Room以及ViewModel。就像下图中展示的,界面组件负责显示UI界面,ViewModel负责处理UI数据,你可以使用LiveData来更新数据进而更新UI界面。Respository是一个唯一的数据层结构,你可以使用Room来进行数据持久化。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

在这一基础上,我们还推出来Paging,它可以帮你在recyclerview中更好的夹在分页数据。Paging库已经达到的稳定版本。

接下来,我们来看一下处理阿尔法阶段的两个库,Navigation。 当用户在使用你的应用时,就像下图中的一样,是你为用户设计来一个个的目的地。并且引导用户在这些目的地中浏览。我们为导航列出来这几个必须遵循的原则:

  • 需要有一个共同的其实目的地
  • 导航的状态需要一个栈来代表的(后进先出)
  • 系统和应用的向上和返回按钮因该为用户提供统一的体验
  • 很好的支持DeepLink
Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

让我们来看一下Deep Link的例子(如上图),在这个应用程序当中,从首页到类别到内容,一步一步的到了这样的一个页面,当然,你的用户也可能通过一个url直接来到这个界面。当你做为一个开发者,为了给用户提供这样的一个一致可预测的体验,你需要怎么做呢?,你需要对回退栈做统一。开发者在解决这个问题的时候,要么是自己把导航库的逻辑自己完成了,要么是自己写了很多代码去实现这个功能,但是代码不易于维护。并且是容易出错的。

Navigation就是为了解决这样的问题出现的。Navigation成功的解决了以下问题:

  • 处理Fragment Transactions
  • 处理‘向上’和‘返回’
  • 支持Deep Link
  • 提供动画,跳转效果

Navigation在Android Studio中提供了一个可视化的导航编辑界面,

图片5

这个可视化的界面是一个xml文件,下图是一个xml文件的例子。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

我们说,Acitivty将会作为Navigation的一个切入点,让Fragment成为内容的载体。Activity只是负责一个全部的导航,二中间的部分我们是交给一个NavHost托管的。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

具体是实现导航跳转是使用NavController实现的,为了获取NavController我们为大家提供了下面三个方法

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

如果你要通过一个按钮来跳转一个界面,我们为大家提供来一个方便的方法createNavigateOnClickListener,如果你不想用这个方法,我们还提供来另外一种方法来实现,参照下图

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

关于Navigation的跳转动画,你可以参考下图:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

在导航的时候,我们经常需要传递参数,但传递参数我们经常需要考虑的一个问题是:我们无法确保类型的安全。所以Navigation提供来一个插件Safe Args。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

一个常见的DeepLink类型,通常是一个通知、Shortcuts、Widget、Action或者Slices,我们为这些DeepLink提供了一个方法叫做NavDeepLinkBuilder。关于NavDeepLinkBuilder的使用方法,可以参考下图:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

另外一些DeepLink,例如:URL或者自定义的Scheme URIs,我们需要在Navigation图中加入 <deepLink> 标签

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会
Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

由于时间关系,我们无法一一介绍Navigation的所有方法,所以,我们建议开发者在会后可以亲自体验一下Navigation

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

WorkManager

在Android开发过程中的另外一部分对于用户来说是非常重要的,但是也是我们看不见摸不着的,那就是后台运行。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

从最开始,我们为大家提供了Background Services、AlarmManager,到API 21之后,我们为大家提供了Jobs,对于使用Google Play服务的应用,我们又提供了Firebase Job Dispatcher和GcmNetWorkManager。上图中显示了应用市场中各个Android系统的版本分布。你为了覆盖市场上的这些机型,你可能需要写一段很长的if和else代码来判断设备的情况,来选择合理的API。

说到来后台运行,就不得不提设备电量的问题。在使用Background Services的时候,应用经常在后台自行运行,从而造成设备电量快速消耗。为了解决这个问题,Android系统在最近的几个版本中陆续推出来减少设备电量消耗的功能,详细情况请参考下图:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

目前,关于后台运营的API,我们选出以下下几个:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

那么在上图中的几个API当中,我们应该首选哪一个呢?答案是WorkManager。

WorkManager是一个API,它简单到只需要一个dowork()这样的操作,就可以很好的控制后台程序的运行。同时,它支持向后兼容。无论你在应用中是否使用Google Play服务,你都可以使用过WorkManager。

举个例子,例如我们要上传一张照片,下图中是我在上传照片中使用的WorkManager API

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

针对上传图片这个操作,我们来看一看怎么写:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

在这个任务里,我们override的一个doWork方法,doWork方法会在后台运行哦,任务上传成功与否,我们在doWork方法里返回。

在创建好一个任务之后,我们还需要创建一个任务请求:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

如果我们在上传图片的过程中没有网络怎么办?这就需要我们在创建任务的时候添加一个约束条件:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

怎样确定照片是否上传成功?在这里我们可以使用LiveData来观察任务状态:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

刚放给大家介绍来一个新的类叫WorkStatus,它又两个方法,一个是getId,一个是getState

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

如果我们想在上传照片之前先压缩,WorkManager也提供来几个这样的方法,你可以顺序的执行或者同步执行这样的几个任务。

首先,我们先创建一个压缩任务,在压缩任务之后再创建一个上传任务,然后使用beginWith和then把刚才的两个任务依次加群进去,就可以完成这个任务了。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

如果说我想上传多张图片该怎么做呢?WorkManager也为大家提供了一个方法来做这件事情,大家可以依次调用enqueue这个方法,把多个任务请求依次加入到这个方法中就可以了。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

当我们需要选择一张图片来进行上传的时候,需要输入一个URI,我们在进行这个任务的时候,需要一个输入值,在WorkManager中,提供来一个Data用作这个输入值,关于这个Data的相关介绍,请看下图:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

首先,我们给我们的需要上传图片的URL一个做一个bundle,然后把它传入到我们的任务请求当中:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

然后获取之前存入的参数,进而获得需要压缩图片的图片地址,然后把压缩图片的地址存起来:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

我们把这两个任务串起来,就是一个这样的WorkManager任务链:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

怎样取消上传?取消上传,你可以使用cancelWorkById,但是我们不建议你使用id作为任务取消时的标签。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

我们建议大家使用Tags来对你的任务进行标记:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

然后,我们使用getStatusByTag来获得Tag的任务或者取消任务。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

在后台任务中,还又一个非常重要的功能,就是同步,同步又一个特点,就是我们不希望在同一个时间有多个同步任务。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

为了实现这个的效果,我们为大家提供了UniqueWork这个方法:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

具体实现的原理如下:

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

目前WorkManager也处于阿尔法阶段,欢迎大家在会后使用WorkManager。

这里有一些关于Androd JetPack、Navigation和WorkManager的一些资源,欢迎大家在会后进行访问。

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

谢谢大家!

Android JetPack 简介及 Work Manager 和 Navigation 组件详述 | Google 开发者大会

我去推特粉一下这个小姐姐:grin:。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java高并发编程详解

Java高并发编程详解

汪文君 / 机械工业出版社 / 2018-6 / 89.00元

本书共分为四个部分:部分详细地介绍了Java多线程的基本用法和各个API的使用,并且着重介绍了线程与Java虚拟机内存之间的关系。第二部分由线程上下文类加载器方法引入,介绍为什么在线程中要有上下文类加载器的方法函数,从而掌握类在JVM的加载和初始化的整个过程。第三部分主要围绕着volatile关键字展开,在该部分中我们将会了解到现代CPU的架构以及Java的内存模型(JMM)。后一部分,主要站在架......一起来看看 《Java高并发编程详解》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试