版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年Android高频面试题及详细答案(真实面试版)一、Android基础核心面试题1、Activity完整生命周期?日常开发最常用的场景?答案:完整生命周期:onCreate->onStart->onResume->前台运行->onPause->onStop->onDestroy。日常开发使用场景:onCreate:只走一次,做页面初始化、布局绑定、变量初始化、控件绑定。onStart:页面可见但不可交互,适合开启动画、注册普通广播。onResume:页面可交互,适合刷新数据、开启轮询、恢复视频播放。onPause:页面失去焦点,暂停视频、暂停动画、保存临时数据。onStop:页面完全不可见,释放大量资源、停止网络请求。onDestroy:页面销毁,解绑监听、取消请求、释放内存、关闭数据库。补充:后台杀进程不会走onDestroy,不能依赖该方法做关键数据保存。2、Activity四种启动模式及实际业务场景答案:standard(默认):每次跳转都新建实例。适合弹窗、临时详情页。singleTop:栈顶复用,不在栈顶则新建。适合首页、消息页,防止重复打开。singleTask:栈内复用,会清空当前页面之上所有Activity。适合首页、登录页、主页面,返回直接回到主页。singleInstance:独立任务栈,全局唯一。适合系统级页面、悬浮窗页面、独立登录弹窗。3、Bundle为什么能保活数据?原理是什么?答案:屏幕旋转、系统内存不足回收Activity时,系统会主动调用onSaveInstanceState保存Bundle数据。Bundle底层是Map结构,且实现了Parcelable序列化,系统可以将数据写入内存快照,重建页面时再恢复。注意:Bundle不适合存大数据,容易触发TransactionTooLarge崩溃,日常只存状态、ID、简单文本。4、Serializable和Parcelable区别?开发怎么选?答案:Serializable:Java原生序列化,基于反射,效率低、产生大量临时对象、容易GC卡顿,代码简单。Parcelable:Android专属,手动写序列化/反序列化,效率极高、内存开销小、适合Android组件间传输数据。开发规范:组件传值、Intent、Bundle一律用Parcelable;本地简单缓存、少量数据可使用Serializable。二、四大组件&通信机制5、Service前台和后台区别?2026系统权限适配要点答案:后台Service:容易被系统杀,后台限制严格,Android12+后台服务受限严重。前台Service:必须展示通知栏,系统优先级高,不容易被杀,适合音乐播放、下载、定位保活。2026适配重点:Android13/14必须申请POST_NOTIFICATIONS通知权限,否则前台服务无法展示通知、直接失效。后台任务尽量替换成WorkManager,替代传统后台Service。6、BroadcastReceiver静态广播和动态广播区别答案:静态广播:清单文件注册,APP未启动也能接收,但是系统限制越来越多,大部分隐式广播被限制。动态广播:代码注册,跟随页面生命周期,精准、开销小、安全性高,项目中优先使用。现状:新项目基本废弃静态隐式广播,全部用动态广播、EventBus、LiveData替代。7、ContentProvider作用与使用场景答案:主要用于跨进程数据共享,系统通讯录、相册、文件数据都是通过ContentProvider对外暴露。特点:自带权限控制、线程安全、支持增删改查、支持观察者监听数据变化。8、Android进程通信方式有哪些?项目常用哪种?答案:项目真实场景:简单跨进程通信:Messenger,使用简单、支持串行消息。数据共享:ContentProvider。三、UI与View原理(面试高频)9、View绘制三大流程?各自做什么?答案:measure测量:测量View宽高,resolveSize处理父容器限制、wrap_content、match_parent。layout布局:确定View在父容器中的位置、上下左右坐标。draw绘制:绘制背景、绘制自身、绘制子View、绘制装饰(滚动条、焦点)。触发机制:requestLayout()会重新measure+layout;invalidate()只重新draw。10、invalidate和requestLayout区别?开发怎么选?答案:invalidate:只刷新绘制,不重新测量布局,耗时少,适合单纯UI刷新、颜色、文字变化。requestLayout:重新测量+布局+绘制,开销大,适合控件宽高、位置发生变化时使用。11、RecyclerView缓存机制?四级缓存分别是什么?答案:RecyclerView四级缓存(从快到慢):ViewCacheExtension:自定义缓存,基本不用。RecyclerViewPool:跨列表共享缓存,不同RecyclerView共用ViewHolder。HiddenView:屏幕外即将显示的View,无需重新绑定。ScrapView:临时缓存,复用只需要重新绑定数据,不需要重建View。核心优化:尽量复用ViewHolder,减少inflate耗时,解决列表滑动卡顿。12、RecyclerView卡顿优化方案(项目实战)答案:减少item布局层级,避免过度嵌套。开启硬件加速、减少onBindViewHolder耗时操作。图片预加载、缩略图展示,避免滑动时大量图片解码。设置合理缓存大小、复用Pool。DiffUtil增量刷新,不整体刷新列表。分页加载、避免一次性加载大量数据。四、性能优化&内存、卡顿、崩溃13、Android常见内存泄漏场景及解决方案答案:静态变量持有Activity:静态生命周期长于页面,导致页面无法释放。解决方案:使用弱引用、页面销毁置空。Handler匿名内部类:持有外部页面引用,消息未执行完导致泄漏。解决方案:静态Handler+弱引用、页面销毁清空消息队列。线程、协程未取消:页面关闭后台任务仍在运行。解决方案:onDestroy取消协程、终止线程。资源未释放:动画、播放器、传感器、监听未解绑。解决方案:页面销毁统一释放资源。单例持有页面/View:单例全局常驻,导致页面无法回收。解决方案:只持有Application上下文。14、ANR触发条件、排查思路、优化方案答案:ANR触发条件:主线程阻塞5s无响应(按键、触摸事件)Broadcast超时10sService超时20s常见原因:主线程耗时IO、网络请求、循环、解析大数据、数据库阻塞。排查方式:查看/data/anr/traces.txt日志,定位卡死堆栈。优化:所有耗时操作切子线程,主线程只做UI刷新。15、APP启动速度优化方案(2026面试重点)答案:拆分Application初始化,懒加载第三方SDK,不要在主线程一次性初始化所有库。任务异步化、任务优先级分级,启动关键任务优先,非关键任务延后。减少首页面布局层级、减少首次绘制耗时。优化Gradle编译、开启R8混淆压缩、资源瘦身。冷启动、热启动、温启动分开优化,重点优化冷启动。五、网络&数据存储16、OkHttp核心原理、拦截器执行顺序答案:OkHttp核心:责任链模式,通过多级拦截器层层处理请求响应。拦截器顺序:自定义拦截器->重试拦截器->桥接拦截器->缓存拦截器->连接拦截器->网络拦截器。日常开发:统一请求头、签名、日志、token过期刷新、重试机制全部通过拦截器实现。17、Retrofit工作原理答案:Retrofit基于动态代理,将接口方法注解(GET/POST、URL、参数)动态解析,封装成OkHttp请求,最后通过转换器将响应数据解析成实体类。优势:解耦、声明式请求、适配多转换器、扩展性强,是目前Android项目标准网络框架。18、SharedPreferences优缺点&踩坑答案:优点:轻量、简单、适合存储配置、开关、用户状态、token。缺点:全量读写,文件越大越卡。apply异步可能丢数据,commit阻塞主线程。不适合存大量数据、列表数据。优化:小文件拆分SP,大数据改用Room数据库。19、Room优势、为什么替代原生SQLite?答案:Room是谷歌官方ORM数据库框架,基于SQLite封装。优势:注解配置,无需手写SQL语句,减少错误。自带线程安全,强制子线程操作。支持LiveData、Flow自动监听数据变化。支持数据库版本自动迁移。目前新项目全部使用Room,不再使用原生SQLite。六、Jetpack全家桶(2026必问)20、ViewModel原理、为什么能页面重建不丢数据?答案:ViewModel生命周期独立于Activity,由ViewModelProvider管理,存储在Activity宿主的ViewModelStore中。屏幕旋转、页面重建只会销毁视图,不会销毁ViewModel,所以数据可以保留。注意:ViewModel不要持有View、Context引用,避免内存泄漏。21、LiveData原理、粘性事件怎么解决?答案:LiveData是可观察的数据持有者,具备生命周期感知,只会给活跃页面分发数据,自动解绑,无内存泄漏。粘性事件原因:新注册观察者会接收之前已经发送过的数据。解决方案:封装SingleLiveEvent、事件标记位、使用Flow替代。22、Flow和LiveData区别?新项目推荐用哪个?答案:LiveData:适合UI状态、简单页面数据、生命周期感知,使用简单。Flow:基于协程,支持链式调用、转换、合并、限流、背压,能力更强,适合复杂数据流、网络、数据库流式数据。2026新项目主流:UI状态用LiveData,业务数据流全部用Flow。23、WorkManager作用、替代了什么?答案:WorkManager是谷歌官方后台任务框架,兼容所有Android版本,适配系统后台限制。替代了传统的后台Service、定时器、AlarmManager。适合场景:日志上报、离线同步、缓存清理、定时任务、上传下载。七、Kotlin核心面试题24、lateinit和lazy区别?答案:lateinit:变量延迟初始化,可变var,手动赋值,未赋值使用会崩溃,适合UI控件、页面变量。lazy:只读val,首次使用自动初始化,线程安全,单例懒加载,适合数据对象、工具类。25、协程生命周期、取消机制答案:协程通过Job控制生命周期,cancel可以取消协程,子协程会跟随父协程取消。页面销毁时取消viewModelScope/lifecycleScope,彻底杜绝后台任务泄漏,是目前Android最优异步方案。八、Gradle&打包优化26、Gradle打包速度优化、APK瘦身方案答案:打包速度优化:开启离线编译、增量编译、并行编译。关闭不必要的校验、关闭无用Task。升级Gradle和AGP最新稳定版。APK瘦身:资源压缩、图片压缩、webp替换png。移除无用资源、开启R8混淆、代码压缩。动态下发资源、分包、ABI拆分。九、Android系统适配(2026重点)27、Android13/14主要适配点答案:通知权限动态申请,不申请无法弹出通知。前台服务类型必须声明,否则无法启动。照片、视频权限拆分,不再统一读写存储。后台权限严格限制,后台弹窗、后台唤醒受限。28、权限适配总结答案:普通权限直接申请,危险权限动态申请,特殊权限(悬浮窗、安装未知应用、后台弹出)需要引导用户跳转设置开启。高版本系统尽量遵循最小权限原则,避免过度授权导致审核上架问题。十、项目实战面试问答29、你项目里做过哪些性能优化?参考答案(可直接背):我在项目中主要从启动、UI、内存、网络、卡顿五个方向做优化:1、启动优化:拆分Application初始化,第三方SDK懒加载,异步分发任务,减少主线程阻塞,冷启动速度提升明显。2、UI优化:精简布局层级,RecyclerView使用DiffUtil增量刷新,优化列表滑动卡顿,图片统一压缩、缩略图加载。3、内存优化:统一管理页面资源释放,静态引用优化,Ha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国智能制造和制造业数字化转型行业市场现状供需分析及投资评估规划分析研究报告
- 2026医疗影像AI诊断设备临床应用进展与商业模式创新研究报告
- 2026年中小学科学护眼预防近视健康知识竞赛答案
- 2026年中央空调安装工中级技能鉴定押题卷及答案
- 2026年中小学电动车安全骑行远离危险科普答案
- 国际法考试试题及答案
- 土地复垦考试试题及答案
- 新型冠状病毒感染的肺炎防治知识试题(含答案)
- 2026年紫外线培训试题及答案
- 2026年注册给排水工程师专业知识题库及答案
- 第2课 俄国的改革 课件
- 眼科疾病诊疗技术新进展与挑战
- 高校实验室建设项目投标文件
- 创伤性心搏骤停心肺复苏救治专家共识(2025版)完整版 + 损伤控制操作路径
- 2026北京市市政工程设计研究总院有限公司校园招聘笔试历年参考题库
- T∕AOPA 0086-2025 T∕CMSA 0058-2025 低空飞行器起降场地气象监测系统建设要求
- 标准预防知识培训课件
- GA/T 2342-2025车辆管理所场地设置规范
- 《规模化公猪站常温精液生产全过程质控技术规范》征求意见稿
- GB/T 6109.17-2025漆包圆绕组线第17部分:180级自粘性直焊聚酯亚胺漆包铜圆线
- 2025年中级消防题库试卷及答案
评论
0/150
提交评论