热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidJetpack全家桶系列(一)起始篇:Jetpack的前世今生

本文主要分享【androidjetpack教程】,技术文章【AndroidJetpack全家桶系列(一)起始篇:Jetpack的前世今生】为【Android每日一讲】投稿,如果你遇到Andr

本文主要分享【android jetpack 教程】,技术文章【Android Jetpack 全家桶系列(一)起始篇:Jetpack 的前世今生】为【Android每日一讲】投稿,如果你遇到Android开发,Android工程师,移动开发相关问题,本文相关知识或能到你。

android jetpack 教程

前言

Android已经发展了十多年了,可以说是比较成熟的技术了; 一开始时框架很少,也没有什么规范,所有的代码都是要自己写,比如网络请求,数据库请求,数据解析等等

后来出现了一些框架来帮助开发者快速进行开发,比如 XUtils、Volley、OKHttp、EventBus 等,随着框架越来越多,一个应用可以有多种技术选型,直接导致应用开发越来越不规范,导致做出来的应用质量参差不齐,这显然不是谷歌想看到的; 谷歌随后推出了MVP和MVVM相关的官方例子,效果很一般,而且覆盖面只是在架构上,Goole I/O 2018大会上推出的Android Jetpack有望解决以上的问题

1.Android Jetpack简介

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

Android Jetpack中的很多组件并不都是新开发的, 而是很早就有了,比如在Goole I/O 2017大会时推出了 Architecture Component(AAC) 它包括了 LifeCycle、LiveData、ViewModel、Room; 在Goole I/O 2018大会上, 用AndroidX替代了Android Support Library,并在Android Architecture Component的基础上发布了Android Jetpack; AndroidX也是属于Android Jetpack

Jetpack主要特性有以下三点:

1.加速开发: 组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率

2.消除样板代码: Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理)

3.构建高质量的强大应用: Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏

2.Android Jetpack分类

下图是Jetpack的分类

谷歌仍旧不断的完善Android Jetpack,截至到2019年8月已经有很多新加的组件并没有显示在上图中,比如CameraX等。Android Jetpack分类有4种,分别是Architecture、Foundationy、Behavior、UI,下面分别介绍下

2.1 Architecture(架构组件)

Architecture指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,本系列也是围绕着架构组件进行讲解

DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用

Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码

LiveData:在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规observable不同,LiveData是生命周期感知的

Navigation:处理应用内导航

Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用

Room:友好、流畅的访问SQLite数据库。它在SQLite的基础上提供了一个抽象层,允许更强大的数据库访问

ViewModel:以生命周期的方式管理界面相关的数据,通常和DataBinding配合使用,为开发者实现MVVM架构提供了强有力的支持

WorkManager:管理Android的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务

官方推荐的Android应用架构如下图所示

这些架构组件既可以配合使用,也可以单独使用,这里建议还是尽量按照官方推荐的来

2.2 Foundationy(基础组件)

基础组件提供横向功能,例如向后兼容性、测试、安全、Kotlin 语言支持,并包括多个多个平台开发的组件

Android KTX:优化了供Kotlin使用的Jetpack和Android平台API。帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发

AppCompat:帮助较低版本的Android系统进行兼容

Auto:开发Android Auto应用的组件,提供了适用于所有车辆的标准化界面和用户交互

检测:从AndroidStudio中快速检测基于Kotlin或Java的代码

多Dex处理:为具有多个Dex文件应用提供支持

安全:安全的读写加密文件和共享偏好设置

测试:用于单元和运行时界面测试的Android 测试框架

TV:构建可让用户在大屏幕上体验沉浸式内容的应用

Wear OS:开发Wear应用的组件

2.3 Behavior(行为组件)

行为组件可帮助开发者的应用与标准Android服务(如通知、权限、分享)相集成

CameraX:帮助开发简化相机应用的开发工作。它提供一致且易于使用的界面,适用于大多数Android;设备,并可向后兼容至Android 5.0(API 21)

DownloadManager:处理长时间运行的HTTP下载的系统服务

媒体和播放:用于媒体播放和路由(包括Google Cast)的向后兼容API

通知:提供向后兼容的通知API,支持Wear和Auto

权限:用于检查和请求应用权限的兼容性API

设置:创建交互式设置,建议使用AndroidX Preference Library库将用户可配置设置集成到应用中

分享操作:可以更轻松地实现友好的用户分享操作

切片:切片是一种UI模板,创建可在应用外部显示应用数据的灵活界面元素

2.4 UI(界面组件)

Animation and Transition:该框架包含用于常见效果的内置动画,并允许开发者创建自定义动画和生命周期回调

Emoji Compatibility:即便用户没有更新Android系统也可以获取最新的表情符号

Fragment:组件化界面的基本单位

布局:用XML中声明UI元素或者在代码中实例化UI元素

调色板:从调色板中提取出有用的信息

3.在应用中引入Jetpack相关组件

在项目build.gradle中添加google() 库,如下所示

 allprojects {
        repositories {
            google()
            jcenter()
        }
    }

如果想引入Room,可以在模块build.gradle中这么写:

  implementation   "android.arch.persistence.room:runtime:1.1.1"
    annotationProcessor   "android.arch.persistence.room:compiler:1.1.1 "
    androidTestImplementation  "android.arch.persistence.room:testing:1.1.1"

有需要文中完整代码的同学: 现在私信发送 “底层源码” 即可免费获取

现在私信发送 “进阶” 还可以获取《更多 Android 源码解析+学习大纲+面试真题》

总结

这篇文章内部不多,旨在让大家了解Android Jetpack是什么,包括什么,如何引用

从下一篇开始,就开始学习Android Jetpack的架构组件

最后我想说:

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

本文《Android Jetpack 全家桶系列(一)起始篇:Jetpack 的前世今生》版权归Android每日一讲所有,引用Android Jetpack 全家桶系列(一)起始篇:Jetpack 的前世今生需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
大市低开_127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有