Android kotlin Jetpack mvvm 项目

本文详述了Android Jetpack组件的使用,包括导航、生命周期、ViewModel、LiveData、Flow、DataStore、DataBinding及Room数据库的实践。通过实例展示了如何在Android应用中实现高效且一致的用户体验,探讨了MVVM架构的优势和实践方法。
摘要由CSDN通过智能技术生成

Android Jetpack

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码

导航 [navigation](()

navigation是一个框架,用于在 Android 应用中的“目标位置”之间导航,Android Jetpack的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。导航组件由以下三个关键部分组成:

  • 导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。
  • NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。
  • NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController 会安排 NavHost 中目标内容的交换。
navigation 依赖
  • app依赖

implementation “androidx.navigation:navigation-fragment-ktx: n a v v e r s i o n " i m p l e m e n t a t i o n " a n d r o i d x . n a v i g a t i o n : n a v i g a t i o n − u i − k t x : nav_version" implementation "androidx.navigation:navigation-ui-ktx: navversion"implementation"androidx.navigation:navigationuiktx:nav_version”
implementation “androidx.navigation:navigation-dynamic-features-fragment:$nav_version”

  • 如果要使用Safe Args传递安全参数, 要在 项目build.gradle 文件中包含以下 classpath

buildscript {
repositories {
google()
}
dependencies {
def nav_version = “2.3.4”
classpath “androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version”
}
}

此外还需要在应用模块build.gradle添加

apply plugin: “androidx.navigation.safeargs.kotlin”

NavHost:
  • NavigationActivity

class NavigationActivity: AppCompatActivity(R.layout.activity_navigation)

  • activity_navigation
<?xml version="1.0" encoding="utf-8"?>


android:name="androidx.navigation.fragment.NavHostFragment"这是依赖包中的fragment,作用是定义整个导航的起始

设置app:defaultNavHost=“true”,就会拦截系统的返回按钮,这时切换fragment会默认进行入栈

navGraph引用定义好的导航文件

导航图
  • res/navigation/navigation_demo_navigation.xml
<?xml version="1.0" encoding="utf-8"?>





  • 还可以切换到Design模式编辑

在这里插入图片描述 在这里插入图片描述

NavController
  • 在fragment1中直接调用以下代码即可从fragment1切换到fragment2,并且传入参数

findNavController().navigate(NavigationFragment1Directions.actionNavigationFragment1ToNavigationFragment22(“测试”))

其他功能
  • 全局操作 使用全局操作来创建可由多个目的地共用的通用操作
  • 创建深层链接 将用户直接转到应用内特定目的地的链接
  • 使用 NavigationUI 更新界面组件 使用顶部应用栏、抽屉式导航栏和底部导航栏来管理导航
  • 自定义返回导航

[Lifecycle](()

传统在生命周期方法写逻辑代码的缺点
  • 太多管理界面和其他组件的调用,以响应生命周期的当前状态。管理多个组件会在生命周期方法(如 onStart() 和 onStop())中放置大量的代码,这使得它们难以维护
  • 无法保证组件会在 Activity 或 Fragment 停止之前启动。在我们需要执行长时间运行的操作(如 onStart() 中的某种配置检查)时尤其如此
Lifecycle的优势
  • 生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码,您可以将依赖组件的代码从生命周期方法移入组件本身中,此类代码更易于维护。
lifecycle使用
  • 定义LifecycleObserver

inner class MyLifecycleObserver(val lifecycle: Lifecycle) : LifecycleObserver {

@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
CoroutineScope(scope).launch {
delay(3000)
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
LogUtil.e(“开启定位”)
}
}
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
LogUtil.e(“关闭定位”)
}
}

  • 添加LifecycleObserver

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycle.addObserver(MyLifecycleObserver(lifecycle))
}

[ViewModel](()

  • 旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存,负责为界面准备数据。在配置更改期间会自动保留 ViewModel 对象,以便它们存储的数据立即可供下一个 Activity 或 Fragment 实例使用。
ViewModel可以解决什么问题
  • 如果系统销毁或重新创建界面控制器,则存储在其中的任何瞬态界面相关数据都会丢失,为了避免我们的程序出现上述这种情况,我们除了使用Activity的savedInstanceState(仅适合可以序列化再反序列化的少量数据)保存数据之外,还可以使用ViewModel来进行处理数据(可保存较大数据)
  • 简化资源管理工作,避免内存泄漏风险,Activity 和 Fragment经常需要进行可能需要一些时
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值