跳到主要内容

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生命周期感知的可观察数据
RoomSQLite ORM
NavigationFragment 导航管理
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 解耦更彻底,支持多种布局、动画、局部刷新