Android开发面试指南:从四大组件到性能优化的核心考点
移动端开发岗位虽然在2026年不像前几年那样井喷,但Android开发仍然是需求量很大的方向,尤其是具备架构能力和性能优化经验的中高级工程师。Android面试的知识体系很独特:它既有Java/Kotlin语言基础,又有Android特有的组件、机制和性能知识,还涉及操作系统层面的原理。本文帮你建立Android面试的完整知识地图。
Android面试考察的知识层次
从底层到应用层,Android面试通常覆盖六个层次:语言基础(Kotlin/Java)→ 四大组件与进程模型 → 消息机制与线程 → View体系与UI → 架构与Jetpack → 性能优化与系统原理。层次越高、追问越深,中高级岗位尤其看重后三层。
四大组件与进程模型
Activity
生命周期是必考。考察点:Activity的完整生命周期(onCreate到onDestroy)?A/B屏幕旋转时的生命周期变化?onSaveInstanceState和onRestoreInstanceState的时机?启动模式(standard、singleTop、singleTask、singleInstance)的区别和适用场景?Task和返回栈的概念?启动Activity时Intent的Flag优先级?
Service
Service的两种启动方式(startService和bindService)?Service和IntentService的区别?Service在后台运行的限制(Android 8.0后台限制)?如何用前台服务(Foreground Service)?如何做进程保活(这个问题现在基本不考了,Android厂商会杀掉一切)?Service和Thread的关系?
BroadcastReceiver与ContentProvider
广播的分类(静态注册和动态注册、普通广播和有序广播、系统广播)?Android 8.0对静态注册的限制?本地广播(LocalBroadcastManager已废弃)和粘性广播?ContentProvider的用途(跨进程数据共享)?ContentProvider的启动过程和原理?
Handler消息机制:Android面试的经典深挖题
Handler机制几乎必考,而且可以追问得很深。完整回答链条:为什么需要Handler(子线程不能更新UI)?Handler、Looper、MessageQueue的关系?Looper在主线程如何创建(prepare和loop)?MessageQueue的数据结构(单链表按时间排序)?同步屏障(SyncBarrier)和异步消息(用于UI绘制优先级)?IdleHandler的作用?Handler内存泄漏的原因和解决?HandlerThread的用途?
View体系与UI
View的绘制流程
View的测量、布局、绘制三大流程(onMeasure、onLayout、onDraw)?MeasureSpec的计算逻辑?DecorView和ViewRootImpl的关系?自定义View的流程和注意点?View的invalidate和requestLayout的区别?
触摸事件分发
事件分发是高频深挖题。考察点:事件分发的三个方法(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)的调用链?事件是从Activity开始分发的吗?ACTION_DOWN、ACTION_MOVE、ACTION_UP的分发区别?如何解决滑动冲突(外部拦截法、内部拦截法)?
布局与渲染
ConstraintLayout的优势?常见的布局性能问题(层级过深、过度绘制)?渲染管线(Vsync、Choreographer)?卡顿的排查和优化?
架构模式与Jetpack
主流架构
MVC、MVP、MVVM、MVI的区别和演进?Jetpack的ViewModel为什么能保存UI数据?LiveData的原理(生命周期感知)?Flow和LiveData的区别?DataBinding和ViewBinding?Compose和传统View的对比、Compose的状态管理和重组原理?
依赖注入与协程
Hilt/Dagger的依赖注入原理?Koin(基于Kotlin反射)的适用场景?Kotlin协程的面试考点:协程和线程的区别?协程的作用域(GlobalScope、lifecycleScope、viewModelScope)?挂起函数(suspend)的实现原理(状态机)?协程的调度器(Dispatchers.Main、IO、Default)?如何取消协程?结构化并发?
性能优化与系统原理
性能优化四大方向
启动优化:冷启动、热启动、温启动的区别?启动耗时如何优化(启动任务懒加载、异步初始化、避免主线程IO)?如何用启动优化工具(StartupProfiler、MacroBenchmark)?
卡顿优化:卡顿如何检测(Systrace、Perfetto、BlockCanary)?主线程卡顿的常见原因?如何优化布局(减少层级、使用ConstraintLayout)?如何优化过度绘制?
内存优化:内存泄漏如何检测和修复(LeakCanary、Memory Profiler)?Bitmap如何优化(inSampleSize、复用)?如何避免OOM?内存抖动的原因?
包体积优化:APK的构成?如何缩减包体积(资源混淆、代码混淆、so库裁剪、图片压缩)?
网络与数据存储
网络框架:OkHttp的连接池和拦截器机制?Retrofit的动态代理原理?网络请求的缓存策略?数据存储:SharedPreferences的原理和问题?Room的使用和原理?SQLite的事务?
系统原理与进阶
中高级面试会考系统层面:Android的进程模型(Zygote、SystemServer)?Binder机制的原理(为什么Android用Binder做IPC)?四大组件的启动过程(Activity的启动流程)?ANR的触发条件和排查?App的启动流程(从Launcher点击图标到界面显示)?
结合项目准备案例
Android面试非常看重项目实战。准备2-3个拿得出手的项目案例:做过什么样的App、解决了什么技术难题、性能指标优化到什么程度(启动时间从3秒降到1.2秒、崩溃率从千分之五降到千分之一)。每个案例都要能讲清楚背景、方案、结果和数据。如果项目中有自研组件、架构设计或性能优化经历,重点准备,这是中高级面试的加分核心。
准备建议与常见失分点
准备时按"语言 → 组件 → 机制 → View → 架构 → 性能"的顺序复习,每个知识点理解原理后再配代码验证。用OfferGo这类AI面试辅助工具模拟问答,把Handler机制、事件分发、协程原理这些深挖题练到能分层讲清楚。常见失分点:只背答案不理解原理、项目经历没有数据、对Compose等新技术不了解、Kotlin和协程掌握不深。
总结
Android面试的知识体系大而深,但核心主线清晰:四大组件是骨架、Handler和View机制是灵魂、Jetpack和协程是工程标配、性能优化是中高级的敲门砖。按主线系统复习,每个模块准备"原理+实践+坑",配合真实项目案例,你就能在Android面试中展现出扎实的功底和深度。