应用内导航,也就是我们通常所说屏幕切换,一直是 Android 开发很关键的一部分。...我们已正式发布稳定版 Android Jetpack 导航组件,它包含丰富的库、工具和指南,为开发者们提供了一个强劲、完整的导航框架,让开发者可以轻松应对复杂的导航场景。...我们在这个视频中通过一些导航组件的应用实例,向您演示如何通过 "单个 activity 嵌套多个 fragment" 的方法来完成导航工作。...v.qq.com/x/page/v0879xupgo0.html Bilibili 视频链接: https://www.bilibili.com/video/av54529064/ 如果您想获取更详细的技术指导...,可以查看 Android 开发者网站上有关导航组件的 codelabs 课程和开发文档。
通过 Android Jetpack 可以让我们的 BUG 减少,让我们把更多的精力放在打造应用本身。 为了这种模板式的开发,Google 在2018年推出了 Android Jetpack。...接下来,我将会通过一系列的文章来介绍Android Jetpack,旨在希望了解、学习、应用Android Jetpack的小伙伴一个参考资料。...Compinents(架构组件) 架构组件包括 Data Bingding(数据绑定) Room(数据库) WorkManager(后台任务管家) Lifecycle(生命周期) Navigation(导航...(向后兼容) Android KTX(编写更加简洁的Kotlin代码) Multidex (多处理dex的问题) Test(测试) Behavior(行为) Download manager(下载给管理器...最后 可以看得出,Google 推出的 Android Jetpack 组件的集合,可以让我们开发者更加轻松地开发出出色的 Android 应用。
这就是数据倒灌引起的问题。因为LiveData的数据会保存在内存中。 数据倒灌原因: 个人描述:我们都知道LiveData是一个观察者模式,被观察者只要改变了观察者会收到通知。...但是屏幕旋转后,mLastVersion的值却变成了-1。这里就是问题所在了。...倒灌原因小结 Activity异常销毁然后重建,ViewModel会保存销毁之前的数据,然后在Activity重建完成后进行数据恢复,所以LiveData成员变量中的mVersion会恢复到重建之前的值...问题找到了,那如何防止数据倒灌呢? 解决办法 再来回顾下,数据倒灌的常见方式: 屏幕旋转 用户手动切换系统语言 方案: 如果应用不需要横屏,就设置为永久竖屏。...设置android:configChanges="orientation|screenSize",这样普通生命周期就不走了 待续。。。。。
DataBinding 是属于 Jetpack 的一个支持库,可以让你以在布局中声明属性的方式替代编码方式将布局中的 UI 组件和应用数据进行绑定 通常我们让控件和数据交互的方式如下面的代码,调用 findViewById...android:text="@{viewmodel.userName}" /> 这样你就不用在 Activity 中调用 UI 框架去绑定组件再赋值了,优点是更简洁易维护(Jetpack 其它组件都完美支持...demo.gif 示例代码 https://github.com/realskyrin/jetpack_databanding 总结 至此,你应该已经了解到 DataBinding 的强大之处了,虽然只是一个简单的可交互界面...但如果用传统方式去实现的话 Activity 中至少有 100 行以上代码,而 DataBinding 让 Activity 变得十分清爽,此外,DataBinding 与 LiveData、ViewModel 等 Jetpack...组件也是天作之合,Android 官方也非常推荐使用 Jetpack 来开发 APP,这已经形成 Android 开发的固定套路了,熟练掌握这些套路能让你多一些时间享受生活。
中追加如下内容,转换为 AndroidX 项目 android.enableJetifier=true android.useAndroidX=true 3、创建 Entity、DAO、Database...是一个 LiveData 类型,经过注册之后,无论是修改或者删除,都会立刻被 Observer 感知并通知 UI 更新列表 完整示例代码 https://github.com/realskyrin/jetpack_room...android-sunflower https://medium.com/androiddevelopers/introducing-android-sunflower-e421b43fe0c2 https...://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin https://developer.android.com.../reference/android/arch/persistence/room/OnConflictStrategy
我觉得这个问题很重要,当我们使用任何一个新工具的时候都需要弄清楚这个问题,要结合实际情况而非盲目跟随,接下来我会逐一尝试说明 ViewModel 对比传统方案的优劣 只要你接触 Android 开发一段时间...,都不可避免的会遇到 “转屏” 问题 ?...、检测到了 SIM 并更新了 MNC、布局方向发生了变化等十几种情况,发生这些情况时系统默认会关闭并重建 Activity ,这就导致了上面数据莫名其妙消失的问题。...} cm.start() } 再次运行,你会看到时间重置的问题得到解决 ?...完整示例代码 https://github.com/realskyrin/jetpack_viewmodel 参考 https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e
Lifecycles 简介 Lifecycles 即生命周期,属于 Jetpack 架构组件之一的 Lifecycles 组件是可以为其它组件提供生命周期感知能力的一个组件,而具备了生命周期感知能力的组件就叫生命周期感知组件...我们知道,一个 Android App 之所以能够完成一系列复杂任务,都是基于各个基础组件之间的密切配合,我们熟知的四大组件(Activity、Service、Broadcast、Content Provider...)是有生命周期的,并且 Android 的操作系统层或者 FrameWork 框架层会为其提供相应的回调,以便程序在不同的状态下做相对正确的事;而普通的组件或者我们自己开发的一些组件就没有这个待遇了,我们通常需要在合适的时候...我们通过一个简易计时器的例子来进行调整,在 Android Jetpack - ViewModel 中,我们实现了一个简易计时器,该计时器可以在 Activity 处于配置更改或后台的情况下继续计时,...完整示例代码 https://github.com/realskyrin/jetpack_lifecycles 生命周期感知组件的最佳实践和用例 最佳实践 保持 UI 控制器(Activity/Fragment
Menu 在 Android 开发中 , NavigationUI 是 用于构建 和 管理应用程序导航界面 的重要工具 , 可以极大地提高开发效率 ; 一、NavigationUI 类简介 NavigationUI...是 Google 官方提供的 用于管理 Navigation 导航的组件 , 属于 Android 系统的 Jetpack 工具包 ; 借助 NavigationUI 可以很方便的 创建和组织应用程序的导航界面...; 如 : 构建复杂的导航结构,垂直或水平的主菜单 , 侧边栏 , 抽屉导航栏等 ; 开发者 可以 通过 NavigationUI 轻松地管理页面的转换和导航 ; NavigationUI 提供了一些静态方法来处理...顶部应用栏 / 抽屉式导航栏 / 底部导航栏中 的界面导航 ; 本篇博客中介绍一种使用场景 : 使用 AppBar 中的菜单选项控制 Navigation 界面跳转 ; 在 Activity 中 ,...|| super.onOptionsItemSelected(item) } e、支持导航回退功能 默认状态下通过 Navigation 导航 , 跳转到 FragmentB 后是无法返回的 ,
等),此感知能力确保了 LiveData 只更新处于生命周期活跃状态的组件的观察者 生命周期活跃状态的定义是这些组件正处于 STARTED 或 RESUMED 状态,LiveData 只会更新活跃状态的观察者...具体可以参考 Android Jetpack - Room 一文所提供的代码示例 转换 LiveData 您可能希望在将 LiveData 对象分派给观察者之前更改存储在 LiveData 对象中的值,...user = Transformations.switchMap(userId) { id -> getUser(id) } 完整代码示例 https://github.com/realskyrin/jetpack_livedata...参考 https://developer.android.com/topic/libraries/architecture/livedata https://codelabs.developers.google.com.../codelabs/android-room-with-a-view-kotlin https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns
Paging是Google 2018 IO大会最新发布的Jetpack中的一个组件,主要用于大数据的分页加载,这篇文章就来探索一下关于Paging的简单使用。...上述关于Paging的介绍参考Android.Arch.Paging: 分页加载的新选项 Paging的使用 导入Paging库: dependencies { def paging_version...= "1.0.0" implementation "android.arch.paging:runtime:$paging_version" // alternatively - without...Android dependencies for testing testImplementation "android.arch.paging:common:$paging_version"...// optional - RxJava support, currently in release candidate implementation "android.arch.paging
重要更新 2018 年,我们推出了 Android Jetpack,帮助开发者遵循最佳做法、减少样板代码,并编写可以在不同 Android 版本和设备中运行的代码。...要全面了解 Jetpack 的新功能,您可以查看我们在 #Android11 发布中的 相关演讲,我们简要介绍了 Jetpack 库的许多更新,并提供了相应的入门指南。...今年,我们发布的 Navigation 2.3 带来多项重大改进,帮助您在应用的不同屏幕之间轻松导航并遵循 Android UI 原则。观看下面视频开始探索吧!...随着过去几个版本在隐私方面的变化,Android Jetpack 正在使您的应用更易于处理权限。...知识点 Jetpack 库已集成最佳实践并提供意见性指导,让您可以更容易构建更高质量的 Android 应用。
简介 在2018年的谷歌I/O大会上,官方发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。...作为下一代的 Android 组件,Android Jetpack 通过提供现代化应用架构以及提供强健的向后兼容能力等方式,让开发者能够快速、轻松地创造拥有卓越性能的高质量应用。...作为一个类库集合,Jetpack具有如下的一些特性: 快速开发:组件可单独使用,也可以同时工作,当使用kotlin语言特性时,可以让你更有效率 消除样板代码:Android Jetpack管理乏味的活动...,例如后台任务、导航和生命周期管理,你可以专注于让你的app更棒的东西。...构建高质量、健壮的app:基于现代设计实践,Android Jetpack组件可以减少崩溃和内存泄漏,且向后兼容。 示例
注意,Jetpack Compose中的控件被定义成一个一个的可组合函数,官方称这些控件为Composable,翻译成中文是“可组合项”,当强调它作为一个界面的一部分出现时,我会使用“控件”或“元素”之类的术语...如果一个元素有子元素,那么它会测量每一个子元素来帮助决定自己的大小,每当一个元素向父元素报告了它自己的大小时,那么它就得到了相对于自身来放置自己的子元素的机会。...现在这个子控件已经根据给定的限制被测量好,下一步,我们就需要计算它离顶部的高度,这里应该使用用户传入的高度减去FirstBaseline的位置,得到的就是这个控件应该离顶部的高度。...placeable.placeRelative(0,yPos) yPos += placeable.height } } } } 总结 可以看出Jetpack...相关视频 【Android进阶】Compose函数式编程重点分析
Jetpack笔记代码 使用 在app/build.gradle中开启: android { dataBinding { enabled = true } } 在布局文件中...:tag="layout/activity_main_0", android="http://schemas.android.com/apk/res/android"...xmlns:tools="http://schemas.android.com/tools" android:tag="layout/activity_main_0" > activity_main-layout.xml..., root, 0, (android.widget.TextView) bindings[1]); this.mboundView0 = (android.widget.ScrollView)...,减少判空代码和空指针异常 省去了找id操作,不会再出现id找不着的情况 缺点: apt创建了很多类,增大包体积和编译时长 参考文章 简书-Android中的DataBinding的原理浅析
Room是一种ORM(对象关系映射)框架,可以用OOP(面向对象)的思路开发数据库,有点像早期的greenDAO,不过Room作为Jetpack的一员,能够返回更多类型的数据,比如能直接返回DataSource.Factory...来友好的支持Paging的使用,本文主要总结基础的使用和原理。...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def room_version = "2.2.3" implementation "androidx.room:room-runtime...Paging(后续介绍) 缺点: 生成的类会增大包体积,当然值不值得就得看ROI了。...性能方面的问题暂不做分析。 参考文章 简书-Android Room 框架学习
DataBinding 的集成 DataBinding是一个支持库,它可以运行在Android 4.0(API级别14)或更高版本的设备上。...android { //引入对 DataBinding 的支持 dataBinding { enabled = true } } 以前版本的数据绑定编译器,...使用新的数据绑定的编译器,我们只需要在gradle.properties文件当中,添加上 android.databinding.enableV2=true 或者,在我们的gradle文件当中,添加上如下的参数...> android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com...> android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com
,如下: 这样我们就添加了一个从FirstFragment导航到SecondFragment的动作,我们再添加一个逆向的动作,最终的代码如下: 的导航,最后还需要为这个navigation设置id和默认页面startDestination,如下: android="http://schemas.android.com...fragment标签,android:name设置为实现类,即NavHostFragment;app:navGraph设置为刚才新建的导航视图。...的动作,这个是我们之前在导航视图中配置好的,会导航到SecondFragment。...总结 可以看出通过Google推出的这个Navigation,可以让开发者更加优雅管理导航,同时也简化了这部分的开发工作,可视化功能可以让开发者更直观的进行管理。
Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def lifecycle_version = "2.2.0" implementation "android.arch.lifecycle...MyObserver implements LifecycleObserver { private static final String TAG = "Lifecycle"; //以注解的形式标注其关心的生命周期...,直接实现DefaultLifecycleObserver接口,这样做的好处是可以避免反射, //app/build.gradle android { compileOptions {...10开始,使用Application.ActivityLifecycleCallbacks来分发事件,之前的版本才会使用ReportFragment来分发,看注释大概是为了处理一些兼容问题?...参考文章 简书-Android官方架构组件Lifecycle:生命周期组件详解&原理分析
LiveData即有生命的数据,通过观察者模式实现,当数据发生变化时可以收到回调。同时还具备感知宿主生命周期的能力。...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def lifecycle_version = "2.2.0" //extensions包含Lifecycles、LiveData、...ViewModel implementation "android.arch.lifecycle:extensions:$lifecycle_version" 在act中使用, class ViewModelActivity...void onResume() { //设置数据 mLiveData.setValue("onResume"); } } 使用起来很简单,下面来看看是怎么实现的。...removeObserver 优缺点 优点: 使用简单,可以避免内存泄漏,RxJava则需结合RxLifecycle 能感知生命周期,在页面活跃状态才进行通知,可以避免页面不可见时还在占资源 参考文章 掘金-Android
WorkManager能帮我们更好的管理后台任务,可以更好地管理执行时机、执行顺序和执行状态(有无网络、是否在充电)。...他会根据系统版本选择合适的方案执行任务,比如在API 23及以上使用JobScheduler,以下则使用BroadcastReceiver和AlarmManager,能兼容到API 14。...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def work_versions = "2.3.4" implementation "androidx.work:work-runtime...原理 暂不分析源码,引用掘金-[译] 从Service到WorkManager的一张流程图。 ?...B站-Android Jetpack WorkManager | Android 中文教学视频 掘金-[译] 从Service到WorkManager
领取专属 10元无门槛券
手把手带您无忧上云