版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android开发面试题(真实职场版+详细答案)一、Android基础核心(必问)1.Activity四种启动模式、区别、实际使用场景答案:1)standard(默认):每次启动都新建实例,不管栈中是否存在,谁启动它就入谁的任务栈。适合首页、详情页这种可以重复打开的页面。2)singleTop(栈顶复用):如果当前Activity在栈顶,直接复用,不走onCreate,只走onNewIntent;不在栈顶则新建。适合搜索页、登录页,防止重复打开同一个页面。3)singleTask(栈内复用):整个任务栈内只存在一个实例,启动时会把该Activity之上的所有页面全部出栈,让当前页面置于栈顶。适合首页、主界面、购物车,从多个页面跳回主页不需要叠加页面。4)singleInstance(单例全局):独立独占一个新任务栈,全局唯一,别的App也无法复用。适合系统级弹窗、独立的悬浮窗页面、锁屏页面,项目中极少用。面试加分点:singleTask会触发clearTop效果,任务栈复用,容易出现页面回退逻辑问题,开发中一般主页配置singleTask。2.Activity完整生命周期?日常开发最常用的回调场景答案:完整生命周期:onCreate->onStart->onResume->onPause->onStop->onDestroy简单理解:-onCreate:页面首次创建,只走一次。用来初始化布局、控件、数据初始化、初始化适配器。-onStart:页面可见但不可交互(弹窗覆盖、后台切回)。-onResume:页面前台可交互,焦点获取。开启动画、轮播、定位、视频播放。-onPause:失去焦点,暂停耗时操作、视频、动画,保存临时数据。-onStop:页面完全不可见,释放大量资源,停止网络请求、关闭定时器。-onDestroy:页面销毁,彻底释放资源、解绑监听、取消订阅、避免内存泄漏。高频坑点:弹窗不会触发onStop,只触发onPause;退出页面一定走onPause、onStop、onDestroy。3.横竖屏切换Activity生命周期变化?怎么避免页面重建答案:默认情况下:横竖屏切换会销毁当前Activity,重新创建,生命周期走onPause->onStop->onDestroy->onCreate->onStart->onResume。解决方案:1)清单文件配置android:configChanges="orientation|screenSize",切换屏幕不会重建Activity,只会触发onConfigurationChanged回调。2)保存临时数据:onSaveInstanceState保存数据,onRestoreInstanceState恢复数据,防止重建后数据丢失。4.Fragment生命周期、和Activity生命周期联动关系答案:Fragment比Activity多onAttach、onCreateView、onViewCreated、onDestroyView、onDetach。核心联动:-ActivityonResume后,Fragment才会onResume-Activity后台onStop,所有Fragment同步onStop-Fragment页面销毁分两种:只销毁视图(onDestroyView)、彻底销毁实例(onDetach)实战场景:ViewPager+Fragment会缓存Fragment实例,只会走onDestroyView,不会走onDetach,重复切换不会重建实例,优化性能。二、四大组件核心面试题1.Service是什么?前台服务和后台服务区别?答案:Service是后台运行的组件,无界面,用来处理后台耗时任务、常驻任务,比如音乐播放、后台下载、消息推送。后台服务:优先级低,系统内存不足时容易被回收,后台不可见,8.0以上系统禁止后台后台服务,直接报错崩溃。前台服务:必须绑定通知栏,优先级极高,系统不会随意回收,适合长期后台任务(音乐、下载、定位),适配Android8.0+后台限制。2.BroadcastReceiver静态注册和动态注册区别答案:静态注册:在清单文件注册,APP未启动也能接收广播,常驻系统,耗电、权限严格,高版本很多静态广播被限制。动态注册:代码中注册,跟随页面/组件生命周期,页面销毁必须解注册,否则内存泄漏,APP退出后无法接收广播,灵活、开销小。实战结论:日常开发优先动态注册,少用静态注册。3.ContentProvider作用、使用场景答案:主要用于跨进程数据共享,统一数据访问接口,系统自带通讯录、相册、短信都是通过ContentProvider对外暴露数据。优势:封装数据、保证数据安全、支持跨APP访问、自带数据监听机制。三、AndroidUI高频面试题1.View绘制流程、三大步骤答案:View绘制核心三步:measure(测量)、layout(布局)、draw(绘制)1)measure:测量View宽高,父View约束子View尺寸,递归遍历所有子View2)layout:确定View在父布局中的位置、上下左右坐标3)draw:绘制自身内容、背景、文字、图片、分割线面试官重点:measure是耗时最长的步骤,嵌套过深、过度绘制都会引发卡顿。2.什么是过度绘制?怎么优化?答案:过度绘制就是同一个屏幕像素点被重复绘制多次,层级越多,越卡顿、耗电。优化方案:1)减少多余嵌套布局,能用ConstraintLayout不用LinearLayout嵌套2)去除多余背景、重复背景(根布局、子布局重复设置背景)3)减少透明View、重叠View4)使用GPU过度绘制工具调试,红色区域就是严重过度绘制区域3.RecyclerView复用原理、和ListView区别答案:复用原理:RecyclerView通过ViewPool缓存ViewHolder,滑动时复用旧View,不需要每次inflate布局,大幅提升滑动流畅度。核心区别:1)ListView复用简陋,只缓存View,不缓存控件,需要频繁findViewById,卡顿严重2)RecyclerView自带ViewHolder,控件复用,无需重复查找控件3)RecyclerView支持多种布局、动画、分割线、局部刷新,扩展性极强4)ListView局部刷新困难,容易错乱实战优化:RecyclerView开启预取、设置固定尺寸、避免onBind耗时操作。四、性能优化&内存泄漏(面试重中之重)1.常见的内存泄漏场景及解决方案答案:1)静态变量持有Activity/Fragment引用:静态变量生命周期比页面长,页面销毁无法回收。解决方案:不用静态持有页面、使用弱引用。2)匿名内部类、Handler持有外部类引用:主线程Handler延迟消息未处理,页面销毁无法释放。解决方案:静态Handler+弱引用Activity,页面onDestroy清空消息队列。3)定时器、广播、监听未注销:页面关闭未停止计时、未解注册。解决方案:onDestroy统一释放资源、取消订阅。4)单例持有Activity引用:单例全局常驻,导致页面无法回收。解决方案:单例只传ApplicationContext,不传Activity。5)RecyclerView图片、资源未释放:大图内存占用过高,未及时回收。2.怎么排查内存泄漏?答案:日常排查工具:AndroidStudioProfiler、LeakCanary流程:反复打开关闭页面->观察内存持续上涨不回落->抓取hprof文件->分析引用链->找到泄漏根源。3.卡顿优化怎么做?主线程为什么不能耗时操作?答案:Android主线程负责UI绘制、刷新、事件分发,主线程阻塞超过5秒会ANR崩溃。卡顿优化方案:1)所有网络请求、文件读写、数据解析、数据库操作全部放子线程2)布局层级精简,减少过度绘制、减少inflate耗时3)避免在onBind、onResume、getView中做耗时逻辑4)大图压缩、图片缓存优化、避免频繁GC五、网络&开源框架原理1.OkHttp核心原理、拦截器流程答案:OkHttp是目前主流网络请求框架,支持连接池、请求重试、缓存、拦截器。拦截器执行顺序:自定义拦截器->桥接拦截器->缓存拦截器->连接拦截器->请求服务器常用场景:统一添加请求头、统一token、日志打印、异常重试、缓存控制。2.Retrofit原理答案:Retrofit是基于OkHttp的封装,本质是动态代理,通过接口注解生成网络请求参数,简化网络请求代码。优势:解耦、注解配置、支持RxJava、协程,代码简洁易维护。3.网络请求为什么要封装基类?答案:避免重复代码,统一处理:token过期、错误码、加载弹窗、异常重试、日志打印、统一请求头,后期维护只改基类,不用改每一个请求。六、Android进阶原理&高频坑题1.堆和栈的区别?Android内存分配答案:栈:存储局部变量、基本数据类型,空间小、速度快、自动回收。堆:存储对象、数组、集合,空间大、速度慢,需要GC回收,内存泄漏全部发生在堆内存。2.ANR是什么?触发场景和解决办法答案:ANR应用无响应,主线程阻塞超时触发。触发场景:1)按键、点击事件5秒未响应2)Broadcast前台10秒、后台60秒未处理完3)Service20秒未执行完成解决:所有耗时操作异步处理,主线程只做UI刷新。3.进程和线程区别?Android多进程场景答案:进程:独立资源、独立内存,互不干扰,崩溃互不影响。线程:依附进程,共享进程资源,单线程卡死影响整个页面。多进程场景:推送、保活、独立下载、插件化、大型APP模块解耦。七、面试手写高频题1.子线程能不能更新UI?答案:不能。AndroidUI不是线程安全的,只允许主线程更新UI。子线程更新会直接抛异常。特殊情况:页面未绘制完成时,子线程短暂可以更新UI,但属于系统漏洞,绝对不能用于项目。正确做法:子线程获取数据->主线程刷新UI(Handler、runOnUiThread、协程)。2.Handler机制原理答案:核心四组件:Handler、Message、MessageQueue、Looper流程:Handler发送Message->消息入队MessageQueue->Looper无限循环取出消息->回调HandlerhandleMessage主线程执行。核心考点:主线程默认初始化Looper,子线程需要手动prepare、loop,否则无法使用Handler。八、项目面试高频提问(面试官最爱问)1.你项目中做过哪些性能优化?参考答案(实战话术,直接背):我在项目中主要做过UI渲染优化、内存优化和网络优化三块:1)UI层面:精简布局层级,用ConstraintLayout替代多层嵌套,去除多余背景,解决过度绘制;RecyclerView做了复用优化、预加载、固定尺寸,提升滑动流畅度。2)内存层面:统一管理资源释放,页面销毁时取消网络请求、清空Handler消息、解注册广播,使用LeakCanary检测并修复内存泄漏;图片统一压缩、缓存,避免大图OOM。3)网络层面:封装Retrofit+OkHttp,统一异常处理、请求缓存、超时重试,减少重复请求,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水库库区道路建设考题及答案解析
- 2026届新疆维吾尔自治区高三下学期第五次调研考试生物试题含解析
- 四川事业单位文秘岗招聘考试专项训练题库及答案
- 水肿中医辨证论治
- 2026年烟草职业技能鉴定真题及答案
- 2026年中级注册安全工程师《道路运输安全实务》考试真题及答案
- 班组级安全培训试题及答案
- 残疾人专职委员考试题库及答案2025
- 秀逗糖果营销策划方案
- 时间的脚印课件
- 院前急救病历书写规范与质量评价标准
- 2026年秋季部编版九年级上册《道德与法治》主要知识点
- 2026年法考主观题案例分析答题模板
- 2026年秋统编版(新)小学道德与法治一年级上册《平平安安回家来》课时练习及答案
- 测绘工程院测绘外业生产安全工作手册(标准版)
- 2026年天津市中考英语试题(含答案)
- 2026年上半年落实全面从严主体责任情况报告
- 外国教育史发展脉络
- 聚丙烯(PP)原材料MSDS报告(PPH-T03牌号)
- 胸腔闭式引流护理团标
- 课后服务外聘机构管理制度(3篇)
评论
0/150
提交评论