
Android 项目开发心得(nnd学校大三下满课)
参考课程:
注意点:
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
中的数据发生变化时,该方法会被调用。
关键点:
观察数据变化:
Observer
用于监听LiveData
中的数据变化。生命周期感知:
LiveData
具有生命周期感知能力,只有当Observer
处于活跃状态(如STARTED
或RESUMED
)时,才会触发onChanged
方法。自动管理:
LiveData
会自动处理生命周期,避免内存泄漏和无效更新。
示例代码:
java
复制
LiveData<String> liveData = ...;
liveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String newData) {
// 当数据变化时,更新 UI
textView.setText(newData);
}
});
参数说明:
this:通常是
LifecycleOwner
(如Activity
或Fragment
),用于绑定Observer
的生命周期。new Observer<String>():实现
Observer
接口,重写onChanged
方法以响应数据变化。
总结:
Observer
是 LiveData
的观察者,用于在数据变化时执行相应操作,且只在活跃状态下触发更新。
LiveData:适用于传统的 Android 应用开发。 StateFlow:适用于 Kotlin 协程场景。什么是Kotlin 协程,向我解释一下
Kotlin 协程(Coroutines)是 Kotlin 提供的一种轻量级并发编程工具,用于简化异步编程和并发任务的管理。它允许开发者以同步的方式编写异步代码,避免了传统回调地狱(Callback Hell)和复杂的线程管理问题。
Kotlin 协程的核心概念
轻量级线程:
协程不是线程,而是运行在线程上的任务。
一个线程可以运行多个协程,协程的切换成本远低于线程。
挂起与恢复:
协程可以通过
suspend
关键字挂起(暂停)当前任务,而不会阻塞线程。当挂起的条件满足时,协程会恢复执行。
结构化并发:
协程与作用域(
CoroutineScope
)绑定,作用域的生命周期决定了协程的生命周期。当作用域被取消时,所有在该作用域中启动的协程都会被自动取消,避免了资源泄漏。
异步编程简化:
协程通过
async
和await
等机制,让异步代码看起来像同步代码,易于理解和维护。
协程的基本用法
启动协程:
使用
launch
启动一个协程:kotlin
复制
GlobalScope.launch { // 协程代码 delay(1000) // 挂起 1 秒 println("Hello from coroutine!") }
挂起函数:
使用
suspend
关键字定义挂起函数:kotlin
复制
suspend fun fetchData(): String { delay(1000) // 模拟网络请求 return "Data fetched" }
异步任务:
使用
async
启动一个异步任务,并通过await
获取结果:kotlin
复制
val result = GlobalScope.async { fetchData() }.await() println(result)
协程的优势
简化异步代码:
避免了回调嵌套,代码更清晰。
高效并发:
协程的切换成本低,适合高并发场景。
生命周期管理:
与
ViewModel
或Activity
的生命周期绑定,避免内存泄漏。
与 Jetpack 集成:
协程与
LiveData
、Room
、Retrofit
等 Jetpack 组件无缝集成。
StateFlow 与协程的关系
StateFlow
是 Kotlin 协程库中的一个组件,用于在协程中管理状态。它是一个可观察的数据流,适合在协程环境中使用,能够替代 LiveData
在 MVVM 架构中的角色。
LiveData
:适用于传统的 Android 开发,依赖于生命周期组件。StateFlow
:适用于 Kotlin 协程场景,提供更强大的功能和灵活性。
总结
Kotlin 协程是一种现代化的异步编程工具,通过挂起和恢复机制,简化了异步代码的编写。它与 Android Jetpack 组件(如 StateFlow
)深度集成,是 Kotlin 开发中不可或缺的一部分。