新版 Android 开发核心笔记
第一章:Android 开发基石
1 开发环境搭建
-
安装 Android Studio
(图片来源网络,侵删)- 官方下载地址:developer.android.com/studio
- 推荐安装最新稳定版,它包含了最新的性能优化和新特性支持。
-
配置 SDK (Software Development Kit)
- SDK Manager: 用于下载不同版本的 Android API、模拟器系统镜像、工具等。
- Target SDK: 你希望应用的最高兼容版本,通常选择最新的 API 级别。
- Minimum SDK: 你的应用最低支持的版本,根据你的目标用户群选择,目前建议 API 24 (Android 7.0) 或更高。
-
创建新项目
- 选择 "Empty Views Activity" 模板,这是最基础的起点。
- 语言选择 Kotlin。
- 包名:应用的唯一标识符(如
com.example.myapp)。
2 Kotlin:Android 的官方语言
Kotlin 是 Google 推荐的 Android 开发语言,它更安全、简洁且与 Java 100% 互操作。
- 基本语法特点:
- 变量声明:
val(value): 不可变变量,类似 Java 的final,推荐优先使用。val name: String = "Android" // 类型可以推断,通常省略
var(variable): 可变变量。var counter = 0 counter++
- 空安全:
- Kotlin 从根本上杜绝了
NullPointerException。 String?表示一个可能为null的字符串。- 安全调用操作符 : 如果对象为
null,则表达式返回null,不会抛出异常。val length: Int? = name?.length
- 空合并操作符 : 如果左侧表达式为
null,则返回右侧的值。val displayName = name ?: "Guest"
- Kotlin 从根本上杜绝了
- 函数:
fun greet(name: String): String { // fun 函数名(参数名: 参数类型): 返回类型 return "Hello, $name!" } // 单行表达式函数 fun greetShort(name: String) = "Hello, $name!"
- 变量声明:
第二章:UI 布局与交互
1 现代 UI 工具:Jetpack Compose (推荐)
Compose 是 Android 推荐的现代 UI 工具包,它使用声明式的方式来构建 UI。

-
核心概念:
- 声明式: 你只需描述 UI 在不同状态下应该“是什么样子”,而不需要关心“如何”更新,框架会帮你处理所有的变化。
- Composable 函数: 所有 UI 元素都是由一个或多个
@Composable注解的函数构建的。 - 状态: UI 的数据源,当状态改变时,Compose 会自动重新执行 Composable 函数来更新 UI。
-
基础组件示例:
import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp // @Composable 表示这是一个可组合的函数 // @Preview 表示这个函数可以在 Android Studio 的预览窗口中查看 @Preview(showBackground = true) @Composable fun Greeting(name: String = "Android") { // remember 用于在重组时保留状态,避免每次都重新初始化 var counter by remember { mutableStateOf(0) } // Column 是一个垂直布局的容器 Column( modifier = Modifier.fillMaxSize().padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text(text = "Hello, $name!") Spacer(modifier = Modifier.height(16.dp)) Text(text = "You have clicked the button $counter times.") Spacer(modifier = Modifier.height(16.dp)) // Button 是一个可点击的组件 Button(onClick = { counter++ // 修改状态,Compose 会自动更新 UI }) { Text("Click me") } } }
2 传统 XML 布局 (仍需掌握)
虽然 Compose 是未来,但市面上仍有大量项目使用 XML 布局。
- View: UI 的基本单元(如
TextView,Button,ImageView)。 - ViewGroup: 用于存放和管理其他 View 的容器(如
LinearLayout,ConstraintLayout)。 - ConstraintLayout (强烈推荐): 功能最强大的布局,通过约束关系定位子视图,能有效减少布局层级,提升性能。
第三章:应用架构与数据流
现代 Android 开发强烈推荐使用 MVVM (Model-View-ViewModel) 架构模式,并配合 Jetpack 组件。

1 MVVM 架构
-
Model (模型层):
- 负责处理数据,包括数据源(如网络 API、数据库)和业务逻辑。
- 通常由 Repository (仓库) 模式封装,统一数据访问入口。
-
View (视图层):
- UI 部分,负责展示数据和用户交互。
- 在 Android 中,这可以是 XML 布局或 Jetpack Compose UI。
- 它只负责观察和显示数据,不包含任何业务逻辑。
-
ViewModel (视图模型):
- 核心枢纽,它持有并暴露 UI 所需的数据(通常作为
StateFlow或LiveData)。 - 它连接 Model 和 View,持有 View 的引用,但不持有 Activity/Fragment 的引用,因此配置更改(如屏幕旋转)不会导致其销毁。
- 包含处理用户交互的逻辑,并调用 Model 层获取数据。
- 核心枢纽,它持有并暴露 UI 所需的数据(通常作为
2 Jetpack 组件详解
-
ViewModel
-
作用: 存储和管理与 UI 相关的数据,使其在屏幕旋转后不丢失。
-
使用:
class MyViewModel : ViewModel() { // 使用 StateFlow 来暴露可观察的状态 private val _uiState = MutableStateFlow(UiState()) val uiState: StateFlow<UiState> = _uiState fun loadData() { // 模拟从网络或数据库加载数据 viewModelScope.launch { _uiState.value = UiState(loading = true) val data = repository.fetchData() _uiState.value = UiState(data = data) } } } data class UiState( val loading: Boolean = false, val data: String = "" )
-
-
LiveData (已逐渐被 StateFlow 替代)
- 一个可观察的数据持有者类,当数据改变时,它会通知观察者(如 UI 组件)。
- 与生命周期感知,只有在 UI 处于活跃状态时才会接收更新。
-
StateFlow / SharedFlow (Kotlin 协程中的首选)
- StateFlow: 类似于
LiveData,用于表示状态,它总是持有当前状态,新的订阅者会立即收到最新的状态。 - SharedFlow: 用于表示事件,如一次性操作的结果。
- StateFlow: 类似于
-
Room (持久化库)
- 一个 SQLite 抽象层,让你能在更少的代码下更轻松地访问数据库。
- 核心组件:
- Entity: 数据库表中的实体类,用
@Entity注解。 - DAO (Data Access Object): 定义访问数据库的方法(增删改查),用
@Dao注解。 - Database: 数据库持有者,用
@Database注解,并包含所有 DAO。
- Entity: 数据库表中的实体类,用
-
Retrofit (网络请求库)
- 一个类型安全的 HTTP 客户端,用于简化网络请求。
- 通过定义接口和注解(如
@GET,@POST)来描述 API。
-
Kotlin Coroutines (协程)
- 用于处理异步编程的官方推荐方案。
- 优点: 代码简洁,可读性高,避免了回调地狱。
- 关键概念:
launch: 启动一个新的协程,用于执行“一劳永逸”的任务
