参考课程:

安卓音乐开发教程sqllitle数据库

注意点:

1.gradle8.0或者其他版本下载太慢或者time out超时(完美解决方法)

解决方法:

#distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.6-all.zip

更换镜像源提升速度-distributionUrl:该属性定义了 Gradle Wrapper 将从哪个 URL 下载 Gradle 发行版。

https\://services.gradle.org/distributions/gradle-8.6-bin.zip:这是具体的下载地址,指向 Gradle 官方服务器上的 Gradle 8.6 版本的二进制分发包。

作用:

当你在项目中使用 Gradle Wrapper 进行构建时,Gradle 会根据这个 URL 自动下载并使用指定版本的 Gradle(这里是 8.6 版本)来进行构建任务。

使用 Gradle Wrapper 可以确保所有开发者和 CI/CD 环境使用相同的 Gradle 版本,从而避免因 Gradle 版本不同导致的构建问题。

如果你需要更新 Gradle 版本,只需修改这个 URL 中的版本号即可。

2.完美解决 AndroidStudio Gradle 下载jar包慢Android Studio : Read timed out和connect timed out的解决方法

解决方法:

pluginManagement {
    repositories {
        maven { url = uri("https://maven.aliyun.com/repository/public") }
        maven { url = uri("https://maven.aliyun.com/repository/google") }

        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven { url = uri("https://maven.aliyun.com/repository/public") }
        maven { url = uri("https://maven.aliyun.com/repository/google") }

        google()
        mavenCentral()
    }
}

rootProject.name = "GenshinMusic"
include(":app")

添加

maven { url = uri("https://maven.aliyun.com/repository/public") }
maven { url = uri("https://maven.aliyun.com/repository/google") }

LiveData 是 Android Jetpack 提供的一种可观察的数据持有类,它具有生命周期感知能力,只有当 Observer 处于活跃状态时才会触发更新。Observer 是什么?

在 Android Jetpack 中,Observer 是一个接口,用于观察 LiveData 对象中的数据变化。Observer 接口定义了一个 onChanged 方法,当 LiveData 中的数据发生变化时,该方法会被调用。

关键点:

  1. 观察数据变化Observer 用于监听 LiveData 中的数据变化。

  2. 生命周期感知LiveData 具有生命周期感知能力,只有当 Observer 处于活跃状态(如 STARTEDRESUMED)时,才会触发 onChanged 方法。

  3. 自动管理LiveData 会自动处理生命周期,避免内存泄漏和无效更新。

示例代码:

java

复制

LiveData<String> liveData = ...;

liveData.observe(this, new Observer<String>() {
    @Override
    public void onChanged(String newData) {
        // 当数据变化时,更新 UI
        textView.setText(newData);
    }
});

参数说明:

  • this:通常是 LifecycleOwner(如 ActivityFragment),用于绑定 Observer 的生命周期。

  • new Observer<String>():实现 Observer 接口,重写 onChanged 方法以响应数据变化。

总结:

ObserverLiveData 的观察者,用于在数据变化时执行相应操作,且只在活跃状态下触发更新。

LiveData:适用于传统的 Android 应用开发。 StateFlow:适用于 Kotlin 协程场景。什么是Kotlin 协程,向我解释一下

Kotlin 协程(Coroutines)是 Kotlin 提供的一种轻量级并发编程工具,用于简化异步编程和并发任务的管理。它允许开发者以同步的方式编写异步代码,避免了传统回调地狱(Callback Hell)和复杂的线程管理问题。


Kotlin 协程的核心概念

  1. 轻量级线程

    • 协程不是线程,而是运行在线程上的任务。

    • 一个线程可以运行多个协程,协程的切换成本远低于线程。

  2. 挂起与恢复

    • 协程可以通过 suspend 关键字挂起(暂停)当前任务,而不会阻塞线程。

    • 当挂起的条件满足时,协程会恢复执行。

  3. 结构化并发

    • 协程与作用域(CoroutineScope)绑定,作用域的生命周期决定了协程的生命周期。

    • 当作用域被取消时,所有在该作用域中启动的协程都会被自动取消,避免了资源泄漏。

  4. 异步编程简化

    • 协程通过 asyncawait 等机制,让异步代码看起来像同步代码,易于理解和维护。


协程的基本用法

  1. 启动协程

    • 使用 launch 启动一个协程:

      kotlin

      复制

      GlobalScope.launch {
          // 协程代码
          delay(1000) // 挂起 1 秒
          println("Hello from coroutine!")
      }
  2. 挂起函数

    • 使用 suspend 关键字定义挂起函数:

      kotlin

      复制

      suspend fun fetchData(): String {
          delay(1000) // 模拟网络请求
          return "Data fetched"
      }
  3. 异步任务

    • 使用 async 启动一个异步任务,并通过 await 获取结果:

      kotlin

      复制

      val result = GlobalScope.async {
          fetchData()
      }.await()
      println(result)

协程的优势

  1. 简化异步代码

    • 避免了回调嵌套,代码更清晰。

  2. 高效并发

    • 协程的切换成本低,适合高并发场景。

  3. 生命周期管理

    • ViewModelActivity 的生命周期绑定,避免内存泄漏。

  4. 与 Jetpack 集成

    • 协程与 LiveDataRoomRetrofit 等 Jetpack 组件无缝集成。


StateFlow 与协程的关系

StateFlow 是 Kotlin 协程库中的一个组件,用于在协程中管理状态。它是一个可观察的数据流,适合在协程环境中使用,能够替代 LiveData 在 MVVM 架构中的角色。

  • LiveData:适用于传统的 Android 开发,依赖于生命周期组件。

  • StateFlow:适用于 Kotlin 协程场景,提供更强大的功能和灵活性。


总结

Kotlin 协程是一种现代化的异步编程工具,通过挂起和恢复机制,简化了异步代码的编写。它与 Android Jetpack 组件(如 StateFlow)深度集成,是 Kotlin 开发中不可或缺的一部分。