十二、了解安卓应用和活动生命周期 十三、处理安卓活动状态变化 十四、安卓活动状态变化示例 十五、保存和恢复安卓活动的状态 十六、了解安卓视图、视图组和布局 十七、AndroidStudio 布局编辑器工具指南...Jetpack 二十三、Android Jetpack 视图模型教程 三十四、安卓 Jetpack 实时数据教程 三十五、安卓 Jetpack 数据绑定概述 三十六、安卓 Jetpack 数据绑定教程...三十七、安卓视图模型保存状态教程 三十八、使用安卓生命周期感知组件 三十九、 安卓 Jetpack 生命周期感知教程 四十、导航架构组件概述 四十一、安卓 Jetpack 导航组件教程 四十二、在安卓系统上创建和管理溢出菜单...十九、了解安卓应用和活动生命周期 二十、处理安卓活动状态变化 二十一、安卓活动状态变化示例 二十二、保存和恢复安卓活动的状态 二十三、了解安卓视图、视图组和布局 二十四、AndroidStudio 布局编辑器工具指南...数据绑定教程 四十四、安卓视图模型保存状态教程 四十五、使用安卓生命周期感知组件 四十六、安卓 Jetpack 生命周期感知教程 四十七、导航架构组件概述 四十八、安卓 Jetpack 导航组件教程
导航编辑器 新的导航编辑器与Android Jetpack的导航组件集成,为创建应用的导航结构提供图形视图。导航编辑器简化了应用内目的地之间导航的设计和实现。...要了解更多信息,请阅读 导航编辑器文档。 AndroidX重构 作为Jetpack的一部分,我们正在使用androidx命名空间将Android支持库重构为新的Android扩展库。...在所需运行配置的“Profiling”选项卡下,选中启动时记录方法跟踪旁边的复选框。 从下拉菜单中选择要使用的CPU记录配置。...导航至要保存文件的位置,然后单击保存。 导入并检查CPU跟踪文件 您现在可以导入并检查.trace使用调试API或 CPU分析器创建的文件 。(目前,您不能导入系统跟踪记录。)...模拟器的改进 您现在可以随时在Android模拟器中保存并加载AVD(Android虚拟设备)的快照,从而可以快速轻松地将模拟设备返回到已知状态进行测试。
Android Jetpack 中的架构组件可帮助您设计稳健、可测试且易维护的应用。...更好地支持重构 在 IDE 里使用重构的方式修改函数名称之后,XML 中会同步进行更新。 ? 更好用的报错信息 数据绑定出错的信息可能一下子跳出来 1,000 条,这种尴尬将成为过去。...——很多开发者会这么问 基本上,开发者会通过 ViewModel 或着 SavedState 来保存自己的内容/状态,当应用配置发生变化时再从 ViewModel 或者 SavedState 中取回保存的内容...ViewModel 用于: 保留应用对网络、数据库的请求 当作大型对象的缓存 SavedState 用于: UI 的状态记录,比如选择区域和滚动距离等 导航状态键值记录 各取所长,联手打造流畅体验 //...点击这里进一步了解 Android Jetpack ?
一些新的Android Jetpack API,比如导航控制器(navigation controller),就能完美地支持fragment。...书中的图参考理解一下该项目的层级结构,然后就是自行实践敲代码。...activity被销毁时,它的FragmentManager会将fragment队列保存下来。...这样,activity重建时,新的FragmentManager会首先获取保存的队列,然后重建fragment队列,从而恢复到原来的状态。...、onStart()以及onResume(),当 fragment 的快速同步上 activity 最新的生命周期状态的后,托管activity的FragmentManager就会边接收操作系统的调用指令
据2025年美团技术报告,83%的Android高级岗面试挂科源于Jetpack原理盲区。...二、2025年大厂必问的7个Jetpack核心原理 原理1:ViewModel的"僵尸复活"机制(字节跳动压轴题) 场景还原:某电商App在屏幕旋转后购物车数据丢失,候选人无法解释ViewModel为何能存活...BR类和DataBinderMapperImpl(源码见APT生成阶段) 性能陷阱: 内存泄漏根源: 未解绑的Binding类持有视图引用 复杂表达式导致计算耗时增加(如嵌套三元运算符) 优化方案: /...{ Glide.with(view).load(url).into(view) } 实测数据:优化后布局渲染速度提升2.3倍 原理4:Navigation的"时空折叠"导航图(美团优选实战...: 通过@Dao生成_Impl类实现SQL验证 事务管理依赖SupportSQLiteDatabase 性能陷阱: 未使用@Transaction包裹多表操作 同步查询阻塞UI线程 高阶方案: // 协程
当执行此类片段事务时,也可将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。借助返回栈,用户可以通过按返回按钮撤消片段事务(后退)。...onCreateView() 系统会在片段首次绘制其界面时调用此方法。如要为片段绘制界面,从此方法中返回的 View 必须是片段布局的根视图。如果片段未提供界面,可以返回 null。...通过调用 addToBackStack(),可以将替换事务保存到返回栈,以便用户能够通过按返回按钮撤消事务并回退到上一片段。...注意:只能在 Activity 保存其状态(当用户离开 Activity)之前使用 commit() 提交事务。如果试图在该时间点后提交,则会引发异常。...与 Activity 一样,您也可使用 onSaveInstanceState(Bundle)、ViewModel 和持久化本地存储的组合,在配置变更和进程终止后保留片段的界面状态。
一、项目背景 本文展示如何使用 Jetpack Compose 中的 AndroidView 加载 WebView,处理页面的加载状态和返回导航操作。...2.2 处理页面加载状态 为了让用户知道页面是否还在加载,监听 WebView 的 onPageStarted 和 onPageFinished,当页面开始加载时,可以展示一个加载中的提示,等页面加载完成后...Compose 和 WebView 的结合 用 Jetpack Compose 的 AndroidView 可以轻松实现了传统的 Android 视图控件(如 WebView)嵌入到 Compose...五、学习笔记 使用 BackHandler 处理返回事件 通过 BackHandler可以在用户按返回键时控制页面的导航行为,特别是处理 WebView 的返回操作。...六、总结 本文展示了如何在 Jetpack Compose 中集成 WebView,处理加载状态和返回导航。
因此,每个页面都应足够灵活,而且应当能够在尺寸过渡期间保持状态不变,这个时候规范布局就能发挥重要作用。针对每个页面,您可以思考一下,当屏幕尺寸变大时,可以添加什么内容。...遵循 Material 指南,我们可以根据宽度的尺寸类别提供替代布局,将导航调整到最方便使用的位置。例如,小屏幕采用底部导航视图,中等屏幕采用 Navigation rail,大屏幕采用完整导航视图。...另外,我们稍后也将看到其他理论上存在的状态,例如书本模式。 △ 折叠设备的三种常见姿态 与其他大屏幕设备一样,我们需要多想想用户会怎样握持未折叠设备?...等导航容器时,屏幕起始侧会被压缩以容纳导航容器。...在书本模式下,设备的状态为 HALF_OPENED,且其方向为 VERTICAL;在桌面模式下的状态为 HALF_OPENED,且其方向为 HORIZONTAL。
背景 Android Jetpack 套件是最近比较流行的组件库,它包含了一系列的优秀实践,本文是先介绍 Jetpack 的概貌。...为何使用 Android Jetpack? 遵循最佳实践: Jetpack 采用最新的设计,且向后兼容性,可以减少崩溃和内存泄露。...消除样板代码: Jetpack 可以管理各种繁琐的后台任务、导航和生命周期管理等。 减少不一致: Jetpack 的组件库可在各种 Android 版本和设备中以一致的方式运作,助您降低复杂性。...Jetpack 包含的组件库 按热门程度展示Jetpack组件库如下: - - activity * 访问基于 Activity 构建的可组合 API。...Jetpack Compose — Android 的新 UI 工具包 Jetpack Compose是 Android 的全新现代 UI 工具包,此版本添加了许多新功能:视图互操作性、更多 Material
据2025年美团技术报告显示,83%的Android高级岗候选人因Jetpack源码原理盲区挂科,其中80%的开发者甚至不知道LiveData的"粘性事件"如何解决。...ViewModel的"僵尸复活"机制(字节跳动压轴题) 场景:某电商App屏幕旋转后购物车数据丢失,如何用ViewModel解决?...DataBinding的"量子纠缠"优化(腾讯文档实战题) 性能黑洞: 内存泄漏:未解绑的Binding类持有视图引用(泄漏率高达37%) 表达式灾难:@{user.isVIP ?...链表实现状态回溯 参数传递:使用SafeArgs插件自动生成Directions类(避免类型转换错误) val directions = FragmentADirections.actionToFragmentB...年的Android战场,Jetpack源码原理已成为区分"码农"与"架构师"的核心标尺。
下面的这张图是Jetpack刚发布时候的图,现在Jetpack的组件已经不止图中的这些了。详细组件见Android Jetpack所有库。...消除样板代码 Android Jetpack 可以管理各种繁琐的Activity(如后台任务、导航和生命周期管理),以便可以专注于打造出色的应用。...当应用程序从前台退到后台(用户按下 Home 键或任务菜单键),会依次调用 Lifecycle.Event.ON PAUSE 和 Lifecycle.Event.ON_ STOP。...Fragment 或AppCompatActivity的状态后,其界面被视为不可变,直到调用ON_START。...如果在保存状态后尝试修改界面,很可能会导致应用的导航状态不一致,因此应用在保存状态后运行 FragmentTransaction时,FragmentManager会抛出异常。
另外也大大增加了多任务处理的机会,用户可以利用多窗口模式同时执行多项任务,那么我们就有新的机会来考虑,比如,多个应用在彼此相邻时的形态、交互、状态切换等,这些都是不错的切入点。...如需了解更多详情,请参阅: 为任意屏幕尺寸构建 Android 界面 折叠屏上应用设计规范,了解一下?...使用 ConstraintLayout,您可以根据布局中视图之间的空间关系指定每个视图的位置和大小。这样一来,当屏幕尺寸改变时,所有视图都可以一起移动和拉伸。...Jetpack Compose 是用于构建原生 Android 界面的工具包,可让您更轻松地设计和构建应用的界面,更快地打造更出色的应用。...关于组件转换有一个要点需要注意: 当用户把自己的设备从一种状态转换到另一种状态时,通常界面上必须至少保留一个元素以帮助他们确定元素位置或了解元素是否发生变更。
[在这里插入图片描述] 点击确定后,就会在res目录下创建navigation目录,以及导航文件nav_graph.xml。...android:name指定NavHostFragment app:navGraph指定导航视图,即建好的nav_graph.xml app:defaultNavHost=true,可以拦截系统的返回键...中,页面之间如果要传递数据,建议传递最少量的数据,因为在 Android 上用于保存所有状态的总空间是有限的。...3.1 使用Bundle传递数据 使用Bundle传递数据时,首先创建 Bundle 对象,然后使用 navigate() 将它传递给目的地,如下所示。...[在这里插入图片描述] 参考: Android Jetpack架构组件(四)之LiveData Android Jetpack架构组件(三)之ViewModel Android Jetpack架构组件(
每当数据更新时,要保存新的数据到 SavedStateHandle; 获取: 如代码中所示,调用 savedStateHandle.get(USER_KEY) 方法获取被保存的 userId。...ViewModel 与 Jetpack 导航: 在 NavGraph 中使用 ViewModel 于 navigation 的 2.1.0-rc01 版本时加入 支持 Java 与 Kotlin 共享...详细了解更多,请参阅: 主题演讲: Jetpack Navigation 的主题演讲 v.youku.com/v_show/id_X… 官方文档: 以编程方式与导航组件交互 developer.android.google.cn...ViewMode 与 Kotlin 协程: viewModelScope 于 Lifecycle 的 2.1.0 版本时加入 只支持 Kotlin Android 平台上的协程 通常情况下,我们使用回调...() } 复制代码 这段示例代码只启动了一个协程,但我们在真实的使用环境下很容易创建出许多协程,这就难免会导致有些协程的状态无法被跟踪。
每当数据更新时,要保存新的数据到 SavedStateHandle; 获取: 如代码中所示,调用 savedStateHandle.get(USER_KEY) 方法获取被保存的 userId。...ViewModel 与 Jetpack 导航: 在 NavGraph 中使用 ViewModel 于 navigation 的 2.1.0-rc01 版本时加入 支持 Java 与 Kotlin 共享...详细了解更多,请参阅: 主题演讲: Jetpack Navigation 的主题演讲 v.youku.com/v_show/id_X… 官方文档: 以编程方式与导航组件交互 developer.android.google.cn...ViewMode 与 Kotlin 协程: viewModelScope 于 Lifecycle 的 2.1.0 版本时加入 只支持 Kotlin Android 平台上的协程 通常情况下,我们使用回调...() } 这段示例代码只启动了一个协程,但我们在真实的使用环境下很容易创建出许多协程,这就难免会导致有些协程的状态无法被跟踪。
Google Home 应用使用了 Kotlin 之后,在某些情况下减少了 80% 代码行数,NullPointerExceptions 与过去同期相比减少 33%。...从历史上看,Android 的视图层次结构一直被描述为 UI 组件树。随着 app 状态的变化,需要更新 UI 层次结构来显示当前的数据。...要创建布局预览,请编写一个不使用任何参数的 Composable 函数,并添加: @Preview annotation 完成应用构建后,预览功能的 UI 会出现在 Android Studio 的 ...Android Studio 提供了 交互式预览模式 。在交互式预览模式下,您可以在 UI 元素中点击或输入,UI 将会响应,就像是在已安装的应用中一样。...这样您就可以实际体验测试 UI,而无需重新安装整个应用或导航到当前页面。
则负责其余的工作-当状态发生改变时,你的UI将自动更新。...Android Studio 4.0.png 使用Jetpack Compose 来开始你的开发工作有2种方式: 将Jetpack Compose 添加到现有项目 创建一个支持Jetpack Compose...在这种情况下,我们将应用一个Spacing修改器,该设置将Cloumn与周围的视图产生间距。 4. 如何显示一张图片?...Text("Android技术杂货铺") Text("依然范特西") } } image.png 可以看到,图片不会按正确的比列显示,接下来,我们来修复它。...Text("Android技术杂货铺") Text("依然范特西") } } } 如上面的代码,添加了MaterialTheme后,重新运行,效果没有任何变化
这些新 API 还将消除设备在横竖屏切换时需要自定义逻辑的需求,在大多数情况下只需针对不同的窗口大小类断点进行设计,应用就会适应正确的布局和各种应用状态。...假设我们需要使用较小的高度断点来对横屏手机界面进行布局优化,虽然这听起来很复杂,但是别担心,根据我们同许多 Android 开发者进行深谈后,大部分情况下只需要根据宽度进行布局适配就可以了。...我们先来进行第一项优化,使用 NavRail 而非底部应用栏,首先我们要考虑的是导航模型,所幸我们不会更改很多具体的视图,仅仅只会更改导航方式,因为 NavRail 会一直存在于整个视图体系中,可以通过它导航到任何其他视图...这样,当我选择一项任务并且应用从双窗口变成单窗口时,该项目将位于导航栈的顶部,并是可见的状态。...Jetpack Compose Jetpack Compose 在 2021 年 7 月发布了 1.0 版本后,在 Android 开发者社区产生了巨大反响,成千上万的应用已经在生产环境中使用了 Compose
为了在 Android 12 及之后的版本中打造更好的分屏模式体验,我们正在协助用户,让所有应用在启动后自动进入分屏模式,无论这些应用是否声明为可调整大小。...视图)。...如果您的应用使用多个 Activity,则 Activity embedding 可以改善您使用大屏幕设备时的体验。...△ 参考设备定义 布局验证 在调整大屏幕 UI 时,如果您不确定从哪里开始入手,您可以首先使用新的工具来发现可能会对大屏幕设备造成影响的潜在问题。...△ 可调整尺寸的 Android 模拟器 Google Play 针对大屏幕设备的更新 为了在用户使用平板电脑、可折叠设备和 ChromeOS 设备时为其提供更好的应用体验,我们正在对 Google Play
系统返回按钮的乐趣 无论您在使用 Android 全新的 手势导航 还是传统的导航栏,用户的 "返回" 操作是 Android 用户体验中关键的一环,把握好返回功能的设计可以使应用更加贴近整个生态系统。...saveBackStack() 可以实现弹出事务所实现的返回效果,此外它还可以确保视图状态、已保存的实例状态,以及 ViewModel 实例能够在销毁时被保存。...我们不能调用得太早 (您的 Fragment 不应该在 STARTED 状态下保存状态),也不能调用得太晚 (您需要在 Fragment 被销毁之前保存状态)。...这使得开发者可以基于这些接口设计自己的结构,而无需通过任何非常规的方式保存 Fragment 的视图状态、已保存的实例状态、非配置的状态。...并未更新,NavController 仍会保存 NavBackStackEntry 的状态 (在 Jetpack 世界中向后兼容是非常重要的)。
领取专属 10元无门槛券
手把手带您无忧上云