## 学习目标
理解 Activity、Service、BroadcastReceiver、ContentProvider 的职责,掌握应用生命周期与组件启动方式,是 Android 入门到进阶的关键一步。
## 核心知识点
- Activity 生命周期
- Fragment 生命周期
- Service 的启动与绑定
- BroadcastReceiver 的广播机制
- ContentProvider 的数据共享模型
- 任务栈与启动模式
## 技术介绍
Android 与普通桌面程序最大的差别之一,就是它是组件驱动型系统。页面、后台服务、广播响应、数据共享都不是自由散落的对象,而是由系统托管的组件。
这意味着你在写代码时必须始终考虑两个问题:

- 当前组件会在什么时候被创建和销毁
- 系统可能在什么场景下回收它
## 示例:Activity 生命周期日志
```kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("LifeCycle", "onCreate")
}
override fun onStart() {
super.onStart()
Log.d("LifeCycle", "onStart")
}
override fun onResume() {
super.onResume()
Log.d("LifeCycle", "onResume")
}
override fun onPause() {
super.onPause()
Log.d("LifeCycle", "onPause")
}
override fun onStop() {
super.onStop()
Log.d("LifeCycle", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d("LifeCycle", "onDestroy")
}
}
```
通过切前后台、旋转屏幕、返回退出,你可以观察这些回调顺序。
## 示例:启动 Service
```kotlin
val intent = Intent(this, SyncService::class.java)
startService(intent)
```
如果你希望与 Service 建立交互,则更常见的是 `bindService()`。
## 示例:发送广播
```kotlin
val intent = Intent("com.example.ACTION_SYNC_DONE")
sendBroadcast(intent)
```
对应的接收器:
```kotlin
class SyncReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("Receiver", "sync finished")
}
}
```
## 启动模式要点
- `standard`:默认模式
- `singleTop`:栈顶复用
- `singleTask`:任务栈内唯一
- `singleInstance`:独占任务栈
你不需要一开始就把所有模式背熟,但要理解它们解决的是“页面如何进栈、是否复用实例”这个问题。
## 常见问题
### 1. 为什么旋转屏幕后页面会重建
因为默认配置变化会触发 Activity 重建。你需要理解配置变化与状态恢复机制。
### 2. 为什么后台任务被系统杀掉
Android 对后台进程有严格管理。不要假设 Service 一定常驻。
### 3. Fragment 生命周期为什么比 Activity 更绕
因为 Fragment 同时受到宿主 Activity 和自身视图生命周期影响。
## 建议练习
- 写一个包含两个 Activity 的小项目,观察返回栈行为
- 写一个前台 Service 示例
- 写一个广播通知页面刷新的 demo
- 体验一次配置变化后状态恢复
## 阶段结果
学完这一章,你会对 Android 应用“如何活着、如何被系统管理”有基本认识。这是后续理解架构、性能和稳定性的基础。