Android 面经
核心考点
1. Activity & Fragment 生命周期
Activity: onCreate → onStart → onResume → [运行] → onPause → onStop → onDestroy
Fragment: onAttach → onCreate → onCreateView → onViewCreated → onStart → onResume
→ onPause → onStop → onDestroyView → onDestroy → onDetach
- A 跳 B:A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop
- 按 Back 返回:B.onPause → A.onRestart → A.onStart → A.onResume → B.onStop → B.onDestroy
2. 内存泄漏常见场景
- 静态变量持有 Activity 引用
- 非静态内部类(Handler/AsyncTask)持有外部类引用
- 未注销的监听器、广播、回调
- 资源(Cursor、Stream、Bitmap)未及时释放
- 解决:使用 WeakReference、在 onDestroy 中解绑
3. Handler / Looper / MessageQueue
- Looper 在线程中维护 MessageQueue,loop() 死循环取消息
- Handler 发送/处理消息,绑定到创建它的线程 Looper
- 主线程 Looper 由系统启动时初始化(ActivityThread.main)
4. 协程 (Kotlin Coroutines)
- 轻量级线程,挂起不阻塞线程
Dispatchers.Main / IO / Default:分别用于 UI、IO 密集、CPU 密集viewModelScope / lifecycleScope:自动跟随生命周期取消Flow:冷流,适合异步数据流;StateFlow/SharedFlow:热流
5. Jetpack 核心组件
| 组件 | 作用 |
|---|---|
| ViewModel | 跨配置变化保留数据 |
| LiveData | 生命周期感知的可观察数据 |
| Room | SQLite ORM |
| Navigation | Fragment 导航管理 |
| WorkManager | 后台任务调度 |
| Compose | 声明式 UI 框架 |
6. 性能优化
- ANR 触发:主线程 5s 无响应(耗时操作放子线程)
- 过度绘制:减少层级,避免不必要背景,开启 GPU 调试
- 启动优化:懒加载、异步初始化、减少冷启动耗时
- 内存优化:Bitmap 压缩复用,避免内存抖动
7. 高频面试题
- 进程间通信 (IPC):AIDL、Messenger、ContentProvider、BroadcastReceiver
- 四大组件:Activity、Service、BroadcastReceiver、ContentProvider
- View 绘制流程:measure → layout → draw
- RecyclerView vs ListView:RecyclerView 解耦更彻底,支持多种布局、动画、局部刷新