前言
本文整理了 Android 开发岗位在大厂面试中的常见问题,涵盖核心组件、系统原理及性能优化等方面。
1. Activity
- Activity 的启动流程
- onSaveInstanceState()、onRestoreInstanceState() 的调用时机
- Activity 的启动模式和使用场景
- Activity A 跳转 Activity B,再按返回键,生命周期执行的顺序
- 横竖屏切换、按 home 键、按返回键、锁屏与解锁屏幕、跳转透明 Activity 界面、启动一个 Theme 为 Dialog 的 Activity,弹出 Dialog 时 Activity 的生命周期
- onStart 和 onResume、onPause 和 onStop 的区别
- Activity 之间传递数据的方式,Intent 是否有大小限制,如果传递的数据量偏大,有哪些方案
- Activity 的 onNewIntent() 方法什么时候会执行
- 显示启动和隐式启动
- scheme 使用场景、协议格式、如何使用
- ANR 的四种场景
- onCreate 和 onRestoreInstance 方法中恢复数据时的区别
- Activity 间传递数据的方式
- 跨 App 启动 Activity 的方式、注意事项
- Activity 任务栈是什么
- 有哪些 Activity 常用的标记位 Flags
- Activity 的数据是怎么保存的,进程被 Kill 后,保存的数据怎么恢复的
2. Service
- Service 的生命周期,两种启动方式的区别
- Service 启动流程
- Service 与 Activity 怎么实现通信
- IntentService 是什么,IntentService 原理,应用场景及其与 Service 的区别
- Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
- bindService 和 startService 混合使用的生命周期以及怎么关闭
3. BroadcastReceiver
- 广播的分类和使用场景
- 广播的两种注册方式的区别
- 广播发送和接收的原理
- 本地广播和全局广播的区别
4. ContentProvider
- 什么是 ContentProvider 及其使用
- ContentProvider 与 ContentObserver 之间的关系
- ContentProvider 的实现原理
- ContentProvider 的优点
- Uri 是什么
5. Handler
- Handler 的实现原理
- 子线程中能不能直接 new 一个 Handler,为什么主线程可以?主线程的 Looper 第一次调用 loop 方法,什么时候,哪个类?
- Handler 导致的内存泄露原因及其解决方案
- 一个线程可以有几个 Handler,几个 Looper,几个 MessageQueue 对象
- Message 对象创建的方式有哪些及区别?Message.obtain() 如何维护消息池?
- Handler 有哪些发送消息的方法
- Handler 的 post 与 sendMessage 的区别和应用场景
- Handler postDelay 后有什么变化,假设先 postDelay 10s,再 postDelay 1s,怎么处理这 2 条消息
- MessageQueue 是什么数据结构
- Handler 怎么做到的一个线程对应一个 Looper,如何保证只有一个 MessageQueue,ThreadLocal 在 Handler 机制中的作用
- HandlerThread 是什么?好处?原理?使用场景?
- IdleHandler 及其使用场景
- 消息屏障,同步屏障机制
- 子线程能不能更新 UI
- 为什么 Android 系统不建议子线程访问 UI


