langShiftlangShift

Android 开发基础

学习使用 Kotlin 进行 Android 开发,与 JavaScript 移动开发模式和 React Native 概念进行对比

Android 开发基础

欢迎来到 JavaScript 到 Kotlin 转换的第六个模块!在本模块中,我们将探索使用 Kotlin 进行 Android 开发,并了解它与 JavaScript 移动开发模式(如 React Native)的对比。我们将学习 Android 项目结构、Activity 生命周期、UI 组件和现代 Android 开发实践。

学习目标

通过本模块的学习,你将能够:

  • 理解 Android 项目结构和架构
  • 对比 Android 开发与 React Native 模式
  • 实现 Activity 生命周期管理
  • 有效创建和管理 Fragment
  • 使用 XML 和 Compose 设计响应式布局
  • 处理用户交互和事件
  • 管理 Android 资源和资产
  • 应用现代 Android 开发最佳实践

Android 项目结构

项目组织

Android 项目具有特定的结构,与 JavaScript/React Native 项目有显著差异。让我们探索关键差异。

正在加载编辑器...

目录结构对比

React Native 项目结构:

MyReactNativeApp/
├── App.js # 主应用组件
├── package.json # 依赖管理
├── src/
│ ├── screens/ # 屏幕组件
│ ├── components/ # 可复用组件
│ ├── navigation/ # 导航配置
│ └── utils/ # 工具函数
└── assets/ # 静态资源

Android 项目结构:

MyAndroidApp/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/example/myapp/
│ │ │ │ ├── MainActivity.kt # 主活动
│ │ │ │ ├── ui/ # UI 组件
│ │ │ │ ├── data/ # 数据层
│ │ │ │ └── utils/ # 工具类
│ │ │ ├── res/ # 资源文件
│ │ │ │ ├── layout/ # 布局文件
│ │ │ │ ├── values/ # 值资源
│ │ │ │ ├── drawable/ # 图像资源
│ │ │ │ └── mipmap/ # 应用图标
│ │ │ └── AndroidManifest.xml # 应用清单
│ │ └── test/ # 测试代码
│ ├── build.gradle.kts # 模块构建配置
│ └── proguard-rules.pro # 代码混淆规则
├── build.gradle.kts # 项目构建配置
└── settings.gradle.kts # 项目设置

Activity 生命周期

生命周期管理

Android Activity 有复杂的生命周期,需要正确管理状态。让我们对比 React Native 的组件生命周期。

正在加载编辑器...

生命周期对比表

React Native 生命周期Android Activity 生命周期说明
useEffect(() => {}, [])onCreate()组件/活动创建时执行
useEffect(() => {}, [deps])onResume()组件/活动变为活跃状态
useEffect(() => { return cleanup }, [])onPause()组件/活动暂停时执行
组件卸载onDestroy()组件/活动销毁时执行
状态保存onSaveInstanceState()保存状态以应对配置变化

Fragment 使用

Fragment 基础

Fragment 是 Android 中用于构建灵活 UI 的组件,类似于 React Native 中的可复用组件。

正在加载编辑器...

Fragment 生命周期

Fragment 有自己的生命周期,需要与 Activity 生命周期协调:

// Fragment 生命周期管理
class MyFragment : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
// Fragment 附加到 Activity
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Fragment 创建
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 创建 Fragment 的视图
return inflater.inflate(R.layout.fragment_my, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 视图创建完成,可以初始化 UI 组件
}
override fun onStart() {
super.onStart()
// Fragment 变为可见
}
override fun onResume() {
super.onResume()
// Fragment 变为活跃状态
}
override fun onPause() {
super.onPause()
// Fragment 暂停
}
override fun onStop() {
super.onStop()
// Fragment 停止
}
override fun onDestroyView() {
super.onDestroyView()
// 视图被销毁,清理视图相关资源
}
override fun onDestroy() {
super.onDestroy()
// Fragment 被销毁
}
override fun onDetach() {
super.onDetach()
// Fragment 从 Activity 分离
}
}

布局和 UI 组件

XML 布局 vs Compose

Android 提供了两种 UI 构建方式:传统的 XML 布局和现代的 Compose。

正在加载编辑器...

响应式布局

Android 提供了多种方式创建响应式布局:

// Compose 响应式布局
@Composable
fun ResponsiveLayout() {
val configuration = LocalConfiguration.current
val screenWidth = configuration.screenWidthDp
if (screenWidth >= 600) {
// 平板布局 - 两列
Row(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier
.weight(1f)
.padding(16.dp)
) {
Text("左侧内容")
}
Column(
modifier = Modifier
.weight(1f)
.padding(16.dp)
) {
Text("右侧内容")
}
}
} else {
// 手机布局 - 单列
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
Text("主要内容")
}
}
}
// XML 响应式布局
/*
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="左侧内容" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="右侧内容" />
</LinearLayout>
</LinearLayout>
*/

事件处理

用户交互处理

Android 提供了多种方式处理用户交互,类似于 React Native 的事件处理。

正在加载编辑器...

资源管理

资源文件组织

Android 使用资源文件系统来管理字符串、颜色、尺寸等,类似于 React Native 的常量管理。

正在加载编辑器...

多语言支持

Android 提供了完善的多语言支持机制:

// 多语言资源文件
// res/values/strings.xml (默认语言)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="welcome">Welcome</string>
<string name="login">Login</string>
<string name="register">Register</string>
</resources>
// res/values-zh/strings.xml (中文)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="welcome">欢迎</string>
<string name="login">登录</string>
<string name="register">注册</string>
</resources>
// res/values-zh-rCN/strings.xml (简体中文)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="welcome">欢迎</string>
<string name="login">登录</string>
<string name="register">注册</string>
</resources>
// res/values-zh-rTW/strings.xml (繁体中文)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="welcome">歡迎</string>
<string name="login">登錄</string>
<string name="register">註冊</string>
</resources>
// 动态语言切换
class LanguageManager {
companion object {
fun setLocale(context: Context, languageCode: String) {
val locale = Locale(languageCode)
Locale.setDefault(locale)
val config = context.resources.configuration
config.setLocale(locale)
context.createConfigurationContext(config)
}
}
}
// 在 Activity 中使用
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 设置语言
val language = getSharedPreferences("settings", MODE_PRIVATE)
.getString("language", "zh-CN") ?: "zh-CN"
LanguageManager.setLocale(this, language)
setContentView(R.layout.activity_main)
}
}

现代 Android 开发最佳实践

Jetpack Compose 优势

Jetpack Compose 是 Android 的现代 UI 工具包,提供了声明式 UI 开发方式:

// Compose 最佳实践
@Composable
fun ModernAndroidApp() {
var currentScreen by remember { mutableStateOf("home") }
MaterialTheme {
Scaffold(
topBar = {
TopAppBar(
title = { Text("现代 Android 应用") },
actions = {
IconButton(onClick = { /* 设置 */ }) {
Icon(Icons.Default.Settings, "设置")
}
}
)
},
bottomBar = {
BottomNavigation {
BottomNavigationItem(
icon = { Icon(Icons.Default.Home, "首页") },
label = { Text("首页") },
selected = currentScreen == "home",
onClick = { currentScreen = "home" }
)
BottomNavigationItem(
icon = { Icon(Icons.Default.Person, "个人") },
label = { Text("个人") },
selected = currentScreen == "profile",
onClick = { currentScreen = "profile" }
)
}
}
) { paddingValues ->
when (currentScreen) {
"home" -> HomeScreen(Modifier.padding(paddingValues))
"profile" -> ProfileScreen(Modifier.padding(paddingValues))
}
}
}
}
@Composable
fun HomeScreen(modifier: Modifier = Modifier) {
LazyColumn(modifier = modifier.fillMaxSize()) {
item {
Text(
text = "欢迎使用现代 Android 开发",
style = MaterialTheme.typography.headlineMedium,
modifier = Modifier.padding(16.dp)
)
}
items(10) { index ->
Card(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 4.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Text(
text = "项目 ${index + 1}",
modifier = Modifier.padding(16.dp)
)
}
}
}
}

总结

在本模块中,我们探索了使用 Kotlin 进行 Android 开发的基础知识,并将其与 JavaScript/React Native 模式进行了对比。以下是关键要点:

涵盖的核心概念:

  1. 项目结构:Android 的有组织目录结构 vs React Native 的简化方法
  2. 生命周期管理:Activity 和 Fragment 生命周期 vs React 组件生命周期
  3. UI 开发:XML 布局和 Compose vs React Native 的 StyleSheet 方法
  4. 事件处理:Android 的全面触摸系统 vs React Native 的手势处理
  5. 资源管理:Android 的资源系统 vs React Native 的资产方法
  6. 现代实践:Jetpack Compose 的声明式 UI vs React Native 的基于组件的方法

Android 开发优势:

  • 类型安全:Kotlin 的强类型系统防止运行时错误
  • 性能:原生 Android 性能 vs JavaScript 桥接开销
  • 平台集成:直接访问 Android API 和系统功能
  • 工具支持:Android Studio 提供优秀的 IDE 支持
  • 生态系统:丰富的 Android 特定库和框架

最佳实践:

  1. 使用 Jetpack Compose 进行现代 UI 开发
  2. 实现适当的生命周期管理 以防止内存泄漏
  3. 遵循 Material Design 指南 以获得一致的用户体验
  4. 使用 ViewModel 进行状态管理和配置更改
  5. 实现适当的错误处理 和用户反馈
  6. 优化性能 使用 RecyclerView 和高效布局

下一步:

在下一个模块中,我们将探索使用 Kotlin 进行 Web 开发,包括 Spring Boot 框架和后端服务,继续我们从 JavaScript 到 Kotlin 开发模式的旅程。