![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jetpack
文章平均质量分 91
jetpack 组件库
呆呆的猫
爱发呆 爱抹茶 一直在路上
展开
-
【Android-Jetpack进阶】2、用 Navigation 导航、safe args 传参,NavigationUI 配合 AppBar 的 menu 菜单做跳转、DeepLink 跳转
destination 是目的地,可以是 Fragment 或 Activity,因为通常是一个 Activity 管理多个 Fragment,所以最常见的是 Fragment。通过 DeepLink,可利用 PendingIntent 或 一个真实的 URL 链接,直接跳转到 App 的某个页面(Activity 或 Fragment)。因为 AppBar 的按钮、菜单 也需要控制导航,所以使用NavigationUI 组件可以将 AppBar 和 导航图的页面关联起来,减少重复工作。原创 2022-09-26 21:12:24 · 1232 阅读 · 0 评论 -
【Android-Jetpack进阶】1、JetPack 库是什么、用 LifeCycle 库管理 Activity、Fragment、Service 和 Application 的生命周期
Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。Jetpack 的构成,如下图所示:Jetpact 库由如下4个方面构成:Jetpack 库的 import 路径都是 androidx.xxx,例如下例的appcompact、recyclerview等库:用 Android Studio 新建项目时,默认就会使用 Jetpack 库。可以在项目的 gradle.prope原创 2022-09-25 19:58:48 · 740 阅读 · 0 评论 -
【Android-Jetpack进阶】3、ViewModel 视图模型:使用、源码解析
源码中 androidx.lifecycle.ViewModelStore 源码如下,其以 HashMap 缓存了 ViewModel,当页面需要 ViewModel 时,其会向 ViewModelProvider 索要,若存在则返回,若不存在则实例化一个。当 ViewModel 不再被需要后,其 onCleared() 方法就会被调用,可在其中做一些释放资源的操作。首先,新建 Jetpack3ViewModelTest 项目,在项目添加。原创 2022-09-27 11:44:11 · 422 阅读 · 0 评论 -
【Android-Jetpack进阶】6、WorkManager 后台线程、一次性、周期性、任务链的 Work
WorkManager 用于 App 中不需要及时完成的任务(如上报日志、同步数据),因为将任务落盘到数据库故其保证即使设备重启、App 彻底退出,都依然会执行,其省电,兼容几乎所有设备(高版本用 JobScheduler,低版本用 AlarmManager,最终都是用 Adnroid 的 Executor 执行的),架构如下图。首先,新建项目,项目github地址详见,在 build.gradle(app) 添加如下依赖:然后,新建UploadLogWorker 类,负责上报日志,代码如下:新建 Co原创 2022-09-28 16:00:32 · 717 阅读 · 0 评论 -
【Android-Jetpack进阶】7、DataBinding 布局的变量与事件绑定、inlclude 二级页面绑定、自定义 BindingAdapter
我们可以自定义 BindingAdapter,让 UI 承担更多复杂逻辑。本节我们通过 ImageView 展示如何自定义 BindingAdapter。首先,在 build.gradle 添加依赖 和插件,在 AndroidManifest.xml 中添加网络访问权限。* 加载网络图片) {if(!* 加载资源文件中的图片* 加载网络图片,多个参数的情况if(!* 演示旧参数,新参数$oldPadding* 加载网络图片) {if(!* 加载资源文件中的图片。原创 2022-09-29 11:16:15 · 848 阅读 · 0 评论 -
【Android-Jetpack进阶】8、Paging 分页加载、MVVM 架构
依赖于上一页最后一个对象的某个字段做 key。例如上一页最后一个对象的 key 是 9527,则请求下一页时携带 since=9527&pageSize=5的参数,通过 loadAfter() 加载下一页。移动端请求后端接口时,数据库的内容很多,不可能一次性请求完,所以需要分页加载, Jetpack 的 Paging 库,为分页提供了统一解决方案。用于从任意位置加载数据,加载固定数量,例如 start=2&count=5,通过 loadRange() 加载下一页。原创 2022-09-29 12:31:01 · 563 阅读 · 0 评论 -
【Android-Jetpack进阶】4、LiveData:Activity 监听数据变化,用 LiveData + ViewModel 在 Fragment 间共享数据
ViewModel 内定义 interface,Activity 或 Fragment 实例化 ViewModel 对象时,实现该 interface。这种方式需要大量的 interface,代码很冗余,所以可以用 LiveData 组件。LiveData 是可被观察的数据容器类,其将数据包装起来,当数据变化时可通知观察者。其 observe() 函数的源码如下,第一个参数是 LifecycleOwner 对象(即本例的 Activity),第二个参数是 Observer 对象。原创 2022-09-27 16:45:35 · 1473 阅读 · 0 评论 -
【Android-Jetpack进阶】5、Room 数据库、ViewModel 内通过 Database 查到 LiveData 并通知变化、用 createFromAsset() 预填充数据库
对于跨 version 的情况,例如如果当前手机设备上 sqlite 的数据库 version 是 1,要安装的 App 的数据库 version 是3,Room 会先找 Migration(1,3),若无则执行 Migration(1,2) 和 Migration(2,3)可标记数据库的目标 verison。运行后,当 LiveData 数据变化时,更新 UI 即可,而不需要每次增删改后都必须用。数据库的每个表,都对应一个 Entity,一个 Dao(Dao 负责增删改查操作)原创 2022-09-28 13:44:17 · 840 阅读 · 0 评论