【Android面试】四大组件专题 todo

张开发
2026/4/9 6:35:57 15 分钟阅读

分享文章

【Android面试】四大组件专题 todo
文章目录一、Service含分类、场景、原理、进阶1. 请详细对比 started Service启动服务与 bound Service绑定服务在生命周期、调用方关系、以及销毁条件上的核心区别。2. Android 中的 Service 按运行级别可分为哪几类前台服务、后台服务、绑定服务请分别说明它们的定义、优先级及适用场景。3. 音乐播放器、即时通讯IM、文件下载、天气后台更新这四个典型场景分别应该使用哪种类型的 Service请说明理由。4. 请列举 3 个必须使用前台服务Foreground Service的业务场景并解释为什么这些场景不能用普通后台 Service 或 WorkManager。5. WorkManager和Service的区别6. 在 Android 5.0 以上直接使用 startService 可能会遇到什么问题官方推荐的替代方案及原理是什么7. 当一个 Service 处于后台且长时间运行时它的进程优先级处于哪个层级系统在内存不足时回收这类进程的策略是怎样的8. 前台服务必须显示通知在不同 Android 版本如 Android 13中对前台服务通知的权限和样式有哪些新要求9. 什么场景下必须使用 bindService() 而不是 startService()请举例说明客户端如 Activity需要与 Service 进行频繁交互的业务场景10. IntentService 的原理是什么它有什么优势为什么现在官方推荐使用 WorkManager 替代它11. IntentService 适用于处理什么类型的任务请举例说明它在项目中的具体使用场景以及为什么现在被废弃。12. 如何保证 Service 在后台不被系统杀死保活请列举几种方案并说明其原理与局限性13. 针对推送保活和定位保活这两个场景分别采用什么类型的 Service 组合方案效果最好为什么14. 除了系统应用如电话、短信在第三方应用开发中哪些业务需求会用到基于 AIDL 的远程绑定服务跨进程 Service二、BroadcastReceiver机制、注册、安全、适配、应用场景1. 静态注册和动态注册广播的区别是什么各有什么优缺点2. 本地广播 (LocalBroadcastManager) 的作用和原理是什么相比全局广播有什么优势3. 针对网络状态变更ConnectivityManager、电量变化等系统广播在不同 Android 版本中需要注意哪些兼容性坑点4. 当多个应用注册了相同的系统广播接收者系统是如何决定发送顺序的是否可以通过代码干预有序广播的优先级5. 请列举 系统广播 在实际项目中的 5 个典型应用场景如网络变化、开机、锁屏、电量、安装卸载并说明每个场景的业务价值。6. 有序广播适用于哪些业务场景请举例说明 “优先级拦截、中断广播” 的实际用途。7. 即时通讯IM、推送、应用内事件通知、跨模块通信分别适合用哪种广播全局 / 本地 / 有序请说明选型理由三、ContentProvider数据共享、跨进程、权限、设计1. ContentProvider 的主要作用是什么它是如何实现数据共享的2. ContentResolver、ContentProvider、ContentObserver 三者之间的关系是什么3. 简述 ContentProvider 的 Uri 格式组成以及 UriMatcher 的作用。4. 请描述通过 ContentProvider 进行跨进程数据访问的完整流程5. 在跨进程访问 ContentProvider 时如果数据量巨大如传输大文件或大量图片直接通过 Binder 传输会导致什么问题最佳实践是什么6. ContentProvider 本质上是一种什么设计模式它在应用层和系统层如媒体文件查询分别扮演了什么角色四、Activity启动模式、任务栈、优化1. 详细对比 standard、singleTop、singleTask、singleInstance 四种启动模式的区别并给出在实际项目中 singleTask 可能导致的 Intent 重复传递 或 栈管理混乱 的避坑指南。2. 理解OnNewIntent方法3. 什么是 TaskAffinity任务栈亲和力如何利用它来设计一个独立的应用进程如悬浮窗、独立通知栏4. Activity 的 Theme 与 Window窗口的关系是什么如何通过自定义 Theme 实现 Activity 的透明、沉浸或手势返回效果一、Service含分类、场景、原理、进阶1. 请详细对比 started Service启动服务与 bound Service绑定服务在生命周期、调用方关系、以及销毁条件上的核心区别。生命周期started Service 由 startService 启动生命周期为 onCreate→onStartCommand→onDestroy独立运行bound Service 由 bindService启动生命周期为 onCreate→onBind→onUnbind→onDestroy与绑定组件强相关。调用方关系started Service 调用方退出后仍可运行bound Service 随绑定组件销毁而销毁。销毁条件started Service 需显式停止bound Service 所有客户端解绑后销毁。通信方式started Service 单向 Intent 传参bound Service 通过 Binder 双向交互。使用场景startedService用于不需要与组件如Activity进行通信时如后台播放音乐、下载等bindService用于与activity交互如获取服务状态、数据交互速记版started 独立运行bound 伴生绑定一个单向传参一个双向交互。2. Android 中的 Service 按运行级别可分为哪几类前台服务、后台服务、绑定服务请分别说明它们的定义、优先级及适用场景。前台服务用户可感知需常驻通知优先级极高适用于音乐播放、导航、文件下载。后台服务用户无感知优先级中等适用于数据同步、日志上传8.0 限制严格。绑定服务提供交互接口适用于服务控制、跨进程通信。速记版前台保活、后台同步、绑定交互。3. 音乐播放器、即时通讯IM、文件下载、天气后台更新这四个典型场景分别应该使用哪种类型的 Service请说明理由。音乐播放器前台服务需常驻保活用户感知强。即时通讯前台服务 / 系统推送保障长连接稳定。文件下载前台服务防止后台被回收。天气更新WorkManager非实时、可延迟适配系统调度。4. 请列举 3 个必须使用前台服务Foreground Service的业务场景并解释为什么这些场景不能用普通后台 Service 或 WorkManager。导航 / 地图需持续定位播报后台易被回收无法保证实时性。录音 / 录屏需后台持续工作普通后台易被系统杀死。长连接推送自研推送需保活长连接WorkManager 无法满足实时性。速记版后台需持续工作、实时性要求高的场景必须用前台。5. WorkManager和Service的区别WorkManager是 Android推荐用于执行可延迟、可约束的后台任务的库适合执行那些即使应用退出或设备重启也需要完成的任务比如数据同步、定时清理等。而 Service 更适合执行需要立即开始并持续运行的任务比如播放音乐或下载大文件。但在Android 8 及以上版本中使用普通Service 会受到后台限制必须使用前台服务或优先考虑 WorkManager。Android开发中service就是普通的后台服务前台服务对应的类是ForegroundService6. 在 Android 5.0 以上直接使用 startService 可能会遇到什么问题官方推荐的替代方案及原理是什么Android 5.0 后禁止隐式 Intent 启动 Service否则抛异常替代方案为显式 Intent指定组件名提升安全性。7. 当一个 Service 处于后台且长时间运行时它的进程优先级处于哪个层级系统在内存不足时回收这类进程的策略是怎样的后台 Service 进程属于服务进程优先级低于前台 / 可见进程高于空进程内存不足时系统会回收服务进程回收后是否重启取决于 onStartCommand 返回值。8. 前台服务必须显示通知在不同 Android 版本如 Android 13中对前台服务通知的权限和样式有哪些新要求Android 13需申请 POST_NOTIFICATIONS 权限必须创建通知渠道服务停止需调用stopForeground(true) 移除通知避免残留。9. 什么场景下必须使用 bindService() 而不是 startService()请举例说明客户端如 Activity需要与 Service 进行频繁交互的业务场景需频繁方法调用、数据交互、实时回调时使用例音乐播放控制、实时计算进度回调、跨进程 AIDL 通信、蓝牙通信、定位服务、游戏后台逻辑10. IntentService 的原理是什么它有什么优势为什么现在官方推荐使用 WorkManager 替代它内部封装 HandlerThread 与 Handler串行处理 Intent 任务执行完自动停止优势是无需手动管理线程废弃因 8.0 后台限制WorkManager 更适配系统调度、更省电。11. IntentService 适用于处理什么类型的任务请举例说明它在项目中的具体使用场景以及为什么现在被废弃。适用于一次性、串行后台任务例日志上报、文件压缩废弃因 Android 8.0 后台服务限制严格易被系统杀死。12. 如何保证 Service 在后台不被系统杀死保活请列举几种方案并说明其原理与局限性前台服务提升进程优先级最有效核心方案系统广播监听监听亮灭、升级等广播重启服务高版本限制多双进程守护进程互拉易被清理WorkManager系统调度唤醒稳定性一般13. 针对推送保活和定位保活这两个场景分别采用什么类型的 Service 组合方案效果最好为什么推送保活优先用系统推送通道FCM / 厂商推送官方推荐、省电稳定Foreground Service WorkManager ( FCM/厂商推送)定位保活融合定位 前台服务降低定位频率保证进程存活Foreground Service FusedLocationProviderClient14. 除了系统应用如电话、短信在第三方应用开发中哪些业务需求会用到基于 AIDL 的远程绑定服务跨进程 Service跨 App SDK 接口暴露、进程间复杂数据共享、调用系统底层服务如阿里系、360、腾讯部分应用采用插件化架构宿主 App 与插件运行在不同进程中。大型 App 使用组件化开发各模块运行在不同进程中如支付模块、地图模块将耗资源的服务如音乐播放、长连接推送放在独立进程中避免影响主进程稳定性。使用某些 SDK如地图 SDK、支付 SDK时SDK 内部可能运行在独立进程中。多个应用属于同一开发者希望共享某些服务如登录状态、支付逻辑二、BroadcastReceiver机制、注册、安全、适配、应用场景1. 静态注册和动态注册广播的区别是什么各有什么优缺点静态注册清单注册未启动也能接收常驻监听缺点占资源、高版本限制多。动态注册代码注册随组件生命周期销毁优点灵活省电缺点需成对反注册防泄漏。2. 本地广播 (LocalBroadcastManager) 的作用和原理是什么相比全局广播有什么优势作用是应用内通信原理是内部 Handler实现优势是安全、高效、防劫持仅限本应用。3. 针对网络状态变更ConnectivityManager、电量变化等系统广播在不同 Android 版本中需要注意哪些兼容性坑点网络 / 电量广播7.0 不支持静态注册目的是减少后台常驻降低内存占用提升续航必须动态注册不同厂商行为有差异需适配。4. 当多个应用注册了相同的系统广播接收者系统是如何决定发送顺序的是否可以通过代码干预有序广播的优先级按priority 属性排序数值越大越先收可通过 abortBroadcast 中断setResultExtras 传参5. 请列举 系统广播 在实际项目中的 5 个典型应用场景如网络变化、开机、锁屏、电量、安装卸载并说明每个场景的业务价值。网络变化监听网络切换做重连 / 缓存策略开机广播应用自启动初始化服务锁屏广播锁屏暂停播放 / 定位省电电量变化低电量暂停后台任务安装卸载监听应用状态做关联处理6. 有序广播适用于哪些业务场景请举例说明 “优先级拦截、中断广播” 的实际用途。适用于需按顺序处理、可拦截的场景例短信拦截、权限校验高优先级拦截后终止传递7. 即时通讯IM、推送、应用内事件通知、跨模块通信分别适合用哪种广播全局 / 本地 / 有序请说明选型理由IM / 推送全局有序保证顺序与拦截。应用内事件本地广播安全高效。跨模块全局自定义解耦依赖。三、ContentProvider数据共享、跨进程、权限、设计1. ContentProvider 的主要作用是什么它是如何实现数据共享的作用是跨应用数据共享通过 Binder 跨进程封装数据源提供统一接口。2. ContentResolver、ContentProvider、ContentObserver 三者之间的关系是什么ContentResolver 客户端调用ContentProvider 服务端提供ContentObserver 监听数据变化3. 简述 ContentProvider 的 Uri 格式组成以及 UriMatcher 的作用。Uri 格式content://authority/path/idUriMatcher 匹配 Uri路由到对应操作4. 请描述通过 ContentProvider 进行跨进程数据访问的完整流程客户端 Resolver 发起请求→Binder 跨进程→Provider 处理→返回结果→客户端接收5. 在跨进程访问 ContentProvider 时如果数据量巨大如传输大文件或大量图片直接通过 Binder 传输会导致什么问题最佳实践是什么Binder 数据上限 1MB超量崩溃文件描述符ParcelFileDescriptor / 分页查询 /6. ContentProvider 本质上是一种什么设计模式它在应用层和系统层如媒体文件查询分别扮演了什么角色外观模式应用层封装数据源系统层提供统一数据访问入口。四、Activity启动模式、任务栈、优化1. 详细对比 standard、singleTop、singleTask、singleInstance 四种启动模式的区别并给出在实际项目中 singleTask 可能导致的 Intent 重复传递 或 栈管理混乱 的避坑指南。standard每次新建默认。singleTop栈顶复用否则新建。singleTask栈内复用清空上方可配置 affinity。singleInstance独立栈全局单例。处理singleTask异常singleTask 配置正确 affinity处理 onNewIntent。2. 理解OnNewIntent方法onNewIntent() 方法是在 Activity 已经存在的情况下接收到新的 Intent 时被调用。它通常用于 singleTop、singleTask 或 singleInstance 启动模式的 Activity避免重复创建实例。例如在点击通知栏消息时如果目标 Activity 已经在前台运行系统会调用 onNewIntent() 方法将新的 Intent传递进来而不是新建一个 Activity。开发者可以在该方法中更新界面或处理新的 Intent 数据。3. 什么是 TaskAffinity任务栈亲和力如何利用它来设计一个独立的应用进程如悬浮窗、独立通知栏TaskAffinity 是 Android 中用于指定 Activity 所属任务栈的属性。通过设置不同的 taskAffinity我们可以将某些 Activity 与主任务栈隔离。结合 singleTask 启动模式和FLAG_ACTIVITY_NEW_TASK可以实现悬浮窗、通知栏跳转等独立界面。如果需要真正的进程隔离还可以配合android:process 属性实现多进程架构。4. Activity 的 Theme 与 Window窗口的关系是什么如何通过自定义 Theme 实现 Activity 的透明、沉浸或手势返回效果

更多文章