Android Jetpack应用指南
  • 推荐0
  • 收藏5
  • 浏览3.7K

Android Jetpack应用指南

叶坤 (作者) 

  • 书  号:978-7-121-39055-5
  • 出版日期:2020-06-29
  • 页  数:248
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 维护人:符隆美
电子书 ¥55.30
购买电子书
纸质版 ¥79.00
本书讲解的是 Android Jetpack 最核心的内容——架构。第 1 章将对 Jetpack 做一个大致的介绍。第 2 章至第 9 章,将分别详细介绍为搭建 MVVM 架构而设计的各个 Jetpack 组件,包括LiveData、 ViewModel、 DataBinding 等。第 10 章是对前面各章节的总结,将向读者详细介绍什么是数据模型驱动界面更新、 什么是 MVVM 架构, 以及如何利用 Jetpack 组件搭建符合 MVVM架构规范的应用程序。
本书假设读者对 Android 应用程序有基本的了解,希望系统学习 Jetpack,并打算最终使用
Jetpack 组件架构符合 MVVM 规范的应用程序。

对Jetpack中的每个组件都进行深入浅出地介绍。学习组件如何使用的同时,也对其源码进行简要分析。
每个组件都通过实例进行演示,最大程度地减少读者的学习成本。
Android初学者可通过本书直接上手最符合Google官方标准的应用架构MVVM。
Android老手可以通过本书快速了解Jetpack组件,辨别是否对架构自己的应用程序有所帮助。
推荐序

听到叶坤新书出版的消息,我是十分开心的,因为叶坤最初跟出版社合作第一本书的时候,是我从中牵线的,也算做了一点微小的贡献,现在看到新作又将问世,就有种幻觉,仿佛这其中也有我的功劳一样。
读了本书的样章,风格一丝不苟,自律、内敛,力图准确、简洁,精微之处的讲解与注释又甚为细致,读起来不困不累,言简意赅,我作为Android开发的“门外汉”也能很容易读明白。文如其人,叶坤给我的感觉就是这样,日常十分欢乐,讲解专业问题时认真而生动,对细节的要求又十分严格,近乎一种“变态”的自律。
我们虽然曾为同事,座位也就一步之遥,但在技术工作上的共事并不算多,不过叶坤给了我极其重要的指导,他教会了我如何完成马拉松(不是抽象的长跑,是要跑42公里的那种马拉松),叶坤是我的第一位长跑教练。
记得当时我找他咨询如何报名越野马拉松,听闻我这辈子从没跑过10公里以上,他当时就震惊了,委婉地批评了我的愚蠢自大后,他就带我从“半马”开始练起:一边给予热情的鼓励以免自我劝退,一边进行严格的训练指导以保证完赛。我的第一次“半马”在叶坤如机器般精准的配速领跑下得以顺利完成,作为一个跑过几十个“马”的资深跑者,叶教练稳定精确的跑姿给我留下了极为深刻的印象。虽然跑步是一项孤独的运动,但优秀的领跑的确能让人更容易领悟其美妙之处。从此我也走上了这条“不归路”。
希望本书的读者,也能跟随作者严谨而快乐的节奏,一步步脚踏实地,完成一次美妙的旅程。
豆瓣资深产品研发工程师 苏丹
作者序


2017年我在翻译《Android高性能编程》这本书时,负责与我对接的是电子工业出版社的符隆美。在快要完稿时,为了加快校对进度,我在某个周末去了一趟电子工业出版社。隆美非常辛苦地陪我校对了一整天的文字,还热情地为我们点了咖啡和外卖。我们边吃外卖边聊天,隆美问我有没有兴趣写一本书。我当时有点意外,也非常开心。这相当于我的工作成果在某种程度上得到了认可,作为译者,自然是非常开心和自豪的。但是我对自己也有一些要求,我认为写作是一件严肃的事情,白纸黑字需要经受得住时间和读者的双重考验,这不仅是对读者负责,也是对自己负责。出一本没人看的书,或者市场同质化严重的书,对我而言没有意义。由于没有找到自己满意的题材,这件事便不了了之了。
2018年11月,我离开豆瓣,开启了一段自由职业的经历。在这段时间里,除了旅行和学习阿根廷探戈,我基本没干什么正经事。这样的日子让我觉得空虚。于是我打算利用闲暇时间,总结一下自己在Android应用研发方面的经验。在此过程中,我发现Jetpack这一新鲜且重要的题材,并没有哪本书专门系统地介绍过,于是便萌生了将其汇聚成书的想法。很快我便联系了隆美,这便有了这本《Android Jetpack应用指南》。
2020年是我来北京的第5年,我时常觉得自己很幸运,能够在5年前加入豆瓣,这是改变我人生轨迹的一件事。豆瓣为我带来的机会和价值,远比我为它所付出的要多得多。在豆瓣同事们的影响下,我对自己有了更高的要求,我希望自己能尽量做一些有意义的事情。这本书对读者而言是知识的载体,对我来说是个人价值的一种体现。将知识传播出去,让更多的人受益,是我的追求和目标。我努力斟酌书中的文字,希望降低读者的学习成本,节约读者的时间。如果这本书能够帮到你,我会非常开心!




前 言


开发应用程序就像搭积木。我们对产品业务及功能模块的划分和封装,就像在搭建积木一样。积木不能太大,这不利于修改和拆解;积木也不能太小,否则管理起来可能会很混乱。只有基于稳健、合理的架构,项目才能轻松应对需求的变化,才有可能健康成长。没有良好架构的应用程序,就像没有搭好底座的积木,随着项目复杂度的上升,维护起来会困难重重,工程师会不停地陷入技术债务之中—“积木的倒塌”只是时间问题。
如何把握模块的粒度,在保持模块独立性的同时,又不影响模块间的通信,是全世界优秀的Android工程师共同追求的目标。为了解决这一问题,各类架构模式层出不穷,比较著名的有MVC、MVP和MVVM。Jetpack正是在这一背景下诞生的。它由Google官方推出,用于方便工程师搭建符合MVVM规范的Android应用程序。
本书特色
《Android Jetpack应用指南》是国内外第一本系统介绍Jetpack的图书。它可以让你对Jetpack中的各个组件有一个全面且清晰的了解。本书的每个章节都从实际出发,通过实际案例告诉你,如何使用这些Jetpack组件,为什么需要这些组件,它们能解决开发过程中的什么问题。不仅如此,本书还对其中部分组件的源码进行了简要的分析,让读者能够了解组件背后的原理。知其然,更知其所以然。
周末带上这本书,到咖啡馆点上一杯咖啡,相信只需要一个下午的时间,你就会对Jetpack有一个全面的了解了。如果你愿意按照书中的示例代码运行一遍程序,相信你在下一次面试时,面对面试官提出的关于Jetpack和MVVM的问题,就可以“重拳出击”,而不是“唯唯诺诺”了。
目标读者
读者只需要对Android应用程序开发有基本的了解即可,不需要具备丰富的Android开发经验。
如果读者是一位初级Android工程师,对项目架构充满好奇,想尝试自己来架构应用程序,那么本书一定适合你。它将带领你了解什么是Jetpack,如何使用Jetpack组件构建符合MVVM规范的应用程序,让你少走弯路。
如果读者是一位资深的Android工程师,希望了解Jetpack组件对于架构手头正在研发的项目是否有帮助,那么本书同样适合你。通过本书,你可以快速获知Google对Android的态度,以及Android未来将朝着哪个方向发展。
无论是初级工程师还是资深工程师,相信本书都会对你有所帮助。拥抱Jetpack,就是在拥抱Android的未来!不要有压力,书中有丰富的插图和代码示例,相信你一定可以快速掌握Jetpack!
学习建议
读者可以跳过部分章节,直接学习自己感兴趣的组件,但如果读者对各个组件之间的关系还不太熟悉,强烈建议先按先后顺序阅读一遍。因为本书的章节之间存在一定的关联性,按顺序阅读有助于读者更加清晰地了解组件之间的关系。
书中的代码示例基本涵盖了所有的核心代码。读者在阅读的过程中,若对其中的某些内容感到不解,不妨打开Android Studio,新建一个项目,按照书中提供的代码示例运行一遍,这对读者理解组件会有非常大的帮助。
本书力求通过最简单的示例,将Jetpack各组件的作用和使用方法向读者阐述清楚。但作者能力有限,无法具体到组件的方方面面,若要透彻、深入地掌握某个组件,还需要读者后续进行自行学习。学习的渠道包括但不限于Google搜索引擎、Android官方文档、StackOverflow、GitHub等。
作者致谢
这本书能够顺利出版,首先要感谢电子工业出版社的符隆美,没有她,这本书不可能顺利与大家见面。感谢隆美耐心细致地回复和处理我的每一通电话、每一封邮件。这甚至占用了她不少的周末和假期时间,感激隆美的默默付出!
感谢本书的设计师李玲,封面实在太好看了,我非常喜欢!
感谢本书的编辑崔志伟,她耐心细致地为我找出了书中不少的文字和语法错误。
感谢本书的排版员李明燕,她耐心地优化文字和代码的样式,让本书能够更好地呈现在读者面前。
感谢网龙、搜狐畅游17173、豆瓣及美餐网,感谢你们为我提供了这么好的发展平台。
感谢美餐网同事王运山对我的照顾和帮助,运山专业的技术能力和工作态度让我受益匪浅。
感谢为我写推荐语的各位前同事,你们不仅在工作中对我关照有加,还对我这本书鼎力相助。
感谢我的探戈舞蹈老师李松岩,你毫无保留地教授我探戈技巧,让我理解探戈,并热爱探戈。
感谢“狗哥”李雅雯和“狗子”李五弟。智慧与美丽并重的“狗哥”是我生命里非常重要的一个人。
感谢我的父亲叶碧何、母亲陈忠英、妹妹叶闽,以及两个可爱的小外甥林宇钒、林若熙,你们是我的全部。
最后,我想感谢那些曾经对我提出过质疑和否定的人,是你们让我走得更远。


Android Jetpack组件是库的集合,这些库是为协同工作而构建的,你可以单独使用某个组件,也可以混合搭配使用它们。


目录

第1章 初识Jetpack 1
1.1 Android应用程序架构设计标准的缺失概论 1
1.2 什么是Jetpack 2
1.3 Jetpack与AndroidX 3
1.4 迁移至AndroidX 4
1.5 新建项目默认支持AndroidX 6
1.6 总结 8
第2章 LifeCycle 9
2.1 LifeCycle的诞生 9
2.2 使用LifeCycle解耦页面与组件 10
2.2.1 案例分析 10
2.2.2 LifeCycle的原理 11
2.2.3 解决方案 12
2.3 使用LifecycleService解耦Service与组件 15
2.3.1 LifeCycleService基本介绍 15
2.3.2 LifecycleService的具体使用方法 16
2.4 使用ProcessLifecycleOwner监听应用程序的生命周期 19
2.4.1 ProcessLifecycleOwner存在的意义 19
2.4.2 ProcessLifecycleOwner的具体使用方法 19
2.5 总结 22
第3章 Navigation 24
3.1 Navigation的诞生 24
3.2 Navigation的主要元素 25
3.3 使用Navigation 26
3.3.1 创建Navigation Graph 26
3.3.2 添加NavHostFragment 28
3.3.3 创建destination 30
3.3.4 完成Fragment页面切换 33
3.3.5 使用NavController完成导航 36
3.3.6 添加页面切换动画效果 38
3.4 使用safe args插件传递参数 40
3.4.1 常见的传递参数的方式 40
3.4.2 使用safe args传递参数 40
3.5 NavigationUI的使用方法 43
3.5.1 NavigationUI存在的意义 43
3.5.2 案例分析 43
3.5.3 扩展延伸 48
3.6 深层链接DeepLink 49
3.6.1 DeepLink的两种应用场景 49
3.6.2 PendingIntent的方式 50
3.6.3 URL的方式 52
3.7 总结 54
第4章 ViewModel 56
4.1 视图与数据模型之间的桥梁ViewModel 56
4.2 ViewModel的生命周期特性 57
4.3 ViewModel的基本使用方法 58
4.4 ViewModel的原理 62
4.5 ViewModel与AndroidViewModel 64
4.6 ViewModel与onSaveInstanceState() 方法 65
4.7 总结 65
第5章 LiveData 67
5.1 实时数据LiveData 67
5.2 LiveData和ViewModel的关系 68
5.3 LiveData的基本使用方法 68
5.4 LiveData的原理 71
5.5 LiveData.observeForever()方法 72
5.6 ViewModel+LiveData实现Fragment间通信 73
5.7 总结 79
第6章 Room 80
6.1 Android官方ORM库Room 80
6.2 Room的基本使用方法 81
6.2.1 Room的相关概念 81
6.2.2 案例分析 82

6.3 Room与LiveData、ViewModel结合使用 87
6.3.1 LiveData和ViewModel带来的好处 87
6.3.2 案例优化 89
6.4 Room数据库升级 91
6.4.1 使用Migration升级数据库 91
6.4.2 异常处理 92
6.4.3 Schema文件 93
6.4.4 销毁与重建策略 95
6.5 预填充数据库 96
6.5.1 createFromAsset() API和createFromFile() API 96
6.5.2 createFromAsset() API的使用方法 97
6.6 总结 101
第7章 WorkManager 102
7.1 WorkManager的作用 102
7.2 WorkManager的3个重要特点 102
7.3 WorkManager的兼容方案 103
7.4 WorkManager的基本使用方法 104
7.4.1 添加依赖 104
7.4.2 使用Worker类定义任务 104
7.4.3 使用WorkRequest配置任务 105
7.4.4 将任务提交给系统 107
7.4.5 观察任务的状态 107
7.4.6 取消任务 108
7.4.7 WorkManager与Worker之间的参数传递 108
7.4.8 周期性任务PeriodicWorkRequest 110
7.4.9 任务链 110
7.5 总结 112
第8章 DataBinding 113
8.1 DataBinding的意义和优势 113
8.2 DataBinding的简单绑定 114
8.2.1 未采用DataBinding的编码方式 114
8.2.2 采用DataBinding完成简单的绑定 116
8.3 DataBinding响应事件 124
8.4 二级页面的绑定 127
8.5 BindingAdapter的原理 130
8.6 自定义BindingAdapter 132
8.6.1 自定义BindingAdapter的基本方法 132
8.6.2 方法重载 135
8.6.3 多参数重载 137
8.6.4 可选旧值 138
8.7 双向绑定 141
8.7.1 单向绑定和双向绑定 141
8.7.2 实现双向绑定 142
8.7.3 使用ObservableField优化双向绑定 145
8.7.4 ObservableField与LiveData 146
8.8 RecyclerView的绑定机制 147
8.9 总结 154

第9章 Paging 155
9.1 Paging组件的意义 155
9.2 Paging支持的架构类型 155
9.3 Paging的工作原理 157
9.4 Paging的3个核心类 158
9.5 3种DataSource 159
9.6 PositionalDataSource的使用方法 160
9.7 PageKeyedDataSource的使用方法 176
9.8 ItemKeyedDataSource的使用方法 184
9.9 BoundaryCallback的使用方法 190
9.9.1 BoundaryCallback的意义 190
9.9.2 BoundaryCallback的使用流程分析 191
9.9.3 项目演示 192
9.10 总结 202
第10章 MVVM架构 204
10.1 MVVM架构与Jetpack 204
10.2 数据模型驱动界面更新 204
10.3 简要回顾Jetpack组件 206
10.4 使用Jetpack组件构建MVVM应用程序 207
10.5 总结 224

读者评论

  • 我的版本是 V4.2.1 RunTime Version 是 11.。照着例子抄,,lifecycleservicedemo 这个例子,点击按钮不logcat不输出 Log.d(TAG, “startGetLocation()”); 断点 发现 都没进入。。。。不知道咋回事。。。

    book发表于 2021/7/18 9:29:53
  • 非常好啊 , 比郭霖的书好上不知多少,郭大侠写的都是蜻蜓点水,不成体系,没有深度

    hanscn发表于 2021/4/22 11:49:25
  • 不值这个价格

    yekk发表于 2021/4/4 13:32:31
  • 的确不大好,条理不清晰,实用性差,比郭霖的第一行代码差太多

    lyglostangel发表于 2020/12/25 17:33:05
  • 书写的太浅显,凑字数明显

    可口可乐发表于 2020/12/17 9:57:37

电子书版本

  • Epub

相关博文

  • Jetpack来了:走近Google标准应用架构

    Jetpack来了:走近Google标准应用架构

    陈晓猛 2020-07-15

    开发应用程序就像搭积木。没有良好架构的应用程序,就像没有搭好底座的积木,随着项目复杂度的上升,维护起来会困难重重,工程师会不停地陷入技术债务之中——“积木的倒塌”只是时间问题。 如何把握模块的粒度,在保持模块独立性的同时,又不影...

    陈晓猛 2020-07-15
    306 0 0 0