# Activity生命周期深度解析

Activity是Android应用的核心组件，理解其生命周期对于开发稳定、高效的应用至关重要。本文深入分析Activity生命周期的各个阶段、回调机制和最佳实践。

## Activity生命周期概览

```mermaid
stateDiagram-v2
    [*] --> Created
    Created --> Started: onCreate()
    Started --> Resumed: onStart()
    Resumed --> Paused: onPause()
    Paused --> Resumed: onResume()
    Paused --> Stopped: onStop()
    Stopped --> Started: onRestart()
    Stopped --> Destroyed: onDestroy()
    Destroyed --> [*]
```

## 1. 生命周期回调方法

### 1.1 核心回调方法
- **onCreate()**：Activity创建时调用，用于初始化
- **onStart()**：Activity可见但不可交互
- **onResume()**：Activity获得焦点，可交互
- **onPause()**：Activity失去焦点，但仍可见
- **onStop()**：Activity完全不可见
- **onDestroy()**：Activity销毁前调用
- **onRestart()**：从停止状态重新启动

### 1.2 回调方法执行顺序
```java
// 典型启动流程
onCreate() -> onStart() -> onResume()

// 切换到其他Activity
onPause() -> onStop()

// 返回原Activity
onRestart() -> onStart() -> onResume()

// 销毁Activity
onPause() -> onStop() -> onDestroy()
```

## 2. 生命周期状态管理

### 2.1 状态保存与恢复
- **onSaveInstanceState()**：保存临时状态
- **onRestoreInstanceState()**：恢复保存的状态
- **Bundle使用**：键值对存储状态数据

### 2.2 状态保存示例
```java
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("key", "value");
    outState.putInt("count", mCount);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String value = savedInstanceState.getString("key");
    mCount = savedInstanceState.getInt("count");
}
```

## 3. 配置变更处理

### 3.1 常见配置变更
- **屏幕旋转**：横竖屏切换
- **语言切换**：系统语言变更
- **字体缩放**：系统字体大小调整
- **多窗口模式**：分屏、画中画模式

### 3.2 配置变更策略
```xml
<!-- AndroidManifest.xml中配置 -->
<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
```

## 4. 内存管理优化

### 4.1 内存泄漏预防
- **避免静态引用**：静态变量引用Activity导致泄漏
- **及时取消注册**：广播、监听器及时取消注册
- **使用弱引用**：使用WeakReference避免强引用

### 4.2 资源管理
- **及时释放资源**：在onPause()或onStop()中释放
- **延迟加载**：非关键资源延迟加载
- **缓存策略**：合理使用内存缓存

## 5. 性能优化

### 5.1 启动优化
- **冷启动优化**：减少onCreate()中的耗时操作
- **热启动优化**：利用已缓存的资源
- **温启动优化**：优化状态恢复过程

### 5.2 界面渲染优化
- **布局优化**：减少布局层级
- **视图复用**：使用ViewHolder模式
- **异步加载**：后台线程加载数据

## 6. 调试与问题排查

### 6.1 生命周期日志
```java
// 添加生命周期日志
private static final String TAG = "LifecycleDemo";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate called");
}

@Override
protected void onStart() {
    super.onStart();
    Log.d(TAG, "onStart called");
}
```

### 6.2 常见问题
- **状态丢失**：配置变更导致状态丢失
- **内存泄漏**：Activity无法被回收
- **ANR问题**：生命周期方法执行时间过长

### 6.3 调试工具
```bash
# 查看Activity生命周期日志
adb logcat -s ActivityManager:I *:S

# 分析内存泄漏
adb shell dumpsys meminfo <package_name>

# 性能分析
adb shell systrace.py app
```

## 7. 最佳实践

### 7.1 代码组织
- **单一职责**：每个生命周期方法职责明确
- **分离关注点**：业务逻辑与生命周期分离
- **状态管理**：使用ViewModel管理状态

### 7.2 架构模式
- **MVVM模式**：使用ViewModel管理UI状态
- **MVI模式**：单向数据流架构
- **Clean Architecture**：清晰的分层架构

### 7.3 测试策略
- **单元测试**：测试业务逻辑
- **集成测试**：测试生命周期交互
- **UI测试**：测试界面行为

## 总结

深入理解Activity生命周期对于Android开发至关重要：
- **稳定性**：正确处理生命周期确保应用稳定
- **性能**：优化生命周期方法提升应用性能
- **用户体验**：流畅的生命周期转换提升用户体验
- **可维护性**：良好的生命周期管理提高代码可维护性

掌握Activity生命周期的原理和实践，是成为高级Android开发工程师的基础。