版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android高频面试题及详细答案(实战口语版)一、Android基础核心面试题1.详细说说Android四大组件及各自作用四大组件分别是Activity、Service、BroadcastReceiver、ContentProvider,是Android应用的四大核心模块,各司其职且相互配合。Activity:页面载体,负责和用户交互,承载界面展示、点击、滑动等所有用户操作,是应用可视化的核心,每个页面都是一个独立的Activity,拥有完整的生命周期。Service:后台服务,无界面,专门处理后台耗时、常驻任务,比如后台播放音乐、文件下载、数据同步、保活任务等,不占用前台页面资源,可长期在后台运行。BroadcastReceiver:广播接收器,属于全局消息订阅机制,用于跨组件、跨应用通信。系统会发出各类系统广播(开机、网络切换、电量变化),开发者也可自定义广播,用来监听状态变化、触发页面更新或任务执行。ContentProvider:数据共享组件,主要用于跨应用数据存取,统一数据访问接口。系统通讯录、相册、短信数据都是通过它对外暴露,我们也可以自定义提供者,实现自己应用的数据对外共享,保证数据访问的安全性和规范性。2.讲讲Activity完整生命周期,以及常用场景完整生命周期共7个方法,日常开发核心关注6个,对应页面创建、展示、暂停、销毁全流程:onCreate:页面首次创建调用,只执行一次。主要做初始化操作,比如布局绑定、控件初始化、数据初始化、参数接收。onStart:页面可见但不可交互,多次执行。页面从后台切回、新页面返回时都会触发,只做页面状态刷新,不做耗时操作。onResume:页面获取焦点,可正常交互,多次执行。开启动画、开启轮询、刷新页面数据、恢复暂停的任务。onPause:页面失去焦点,部分遮挡或退到后台,多次执行。暂停动画、停止轮询、保存临时数据、释放轻量资源。onStop:页面完全不可见,多次执行。释放大量资源、停止网络请求、关闭弹窗、停止视频播放。onDestroy:页面销毁,只执行一次。彻底释放所有资源,解绑监听、取消请求、关闭数据库、销毁线程,防止内存泄漏。onRestart:页面从完全不可见变为可见前触发,比如后台切回前台,衔接onStop和onStart。3.Activity横竖屏切换生命周期变化,如何避免页面重建?默认情况下,横竖屏切换会触发Activity销毁重建,生命周期执行:onPause->onStop->onDestroy->onCreate->onStart->onResume。原因:屏幕尺寸、配置发生变化,系统默认重新加载布局,重建页面。解决方案:1.清单文件对应Activity配置android:configChanges="orientation|screenSize|keyboardHidden",拦截配置变化,不会重建页面,只会触发onConfigurationChanged方法;2.固定屏幕方向,配置android:screenOrientation="portrait"竖屏固定/landscape横屏固定;3.重写onSaveInstanceState保存临时数据,重建后在onCreate/onRestoreInstanceState恢复数据。4.Activity任务栈机制、启动模式及适用场景Android通过任务栈管理Activity,遵循先进后出原则,新页面入栈,返回页面出栈,栈顶页面为当前可交互页面。四种启动模式:standard(默认):每次启动都新建实例,不管栈中是否存在,重复创建。适用于普通列表页、详情页,无复用需求的页面。singleTop:栈顶复用。如果要启动的页面已经在栈顶,直接复用,不新建,触发onNewIntent;不在栈顶则新建。适用于首页、搜索页,防止重复打开。singleTask:栈内复用。整个任务栈内存在该页面实例,直接复用,同时清空该页面之上的所有页面,触发onNewIntent。适用于首页、登录页、主页面,返回直接回到目标页面,清空中间页面。singleInstance:单例独占栈。单独开启一个全新任务栈,全局只有一个实例,独占整个栈,其他页面无法进入该栈。适用于系统级悬浮窗、锁屏页面、独立弹窗页面。5.说说Handler机制、原理及消息队列流程Handler是Android线程通信核心,主要解决子线程不能更新UI的问题,实现子线程任务结束后切换到主线程更新界面。核心四组件:Handler、Message、MessageQueue、Looper。核心原理:1.Looper:每个线程唯一,负责开启消息循环,通过loop()方法无限遍历MessageQueue,取出消息分发;主线程默认自带Looper,子线程需要手动创建、启动;2.MessageQueue:消息队列,存储所有Handler发送的Message,按时间顺序排序,先进先出;3.Message:消息载体,携带what、arg1、arg2、obj数据,记录执行时间和目标Handler;4.Handler:消息发送和处理工具,sendMessage/post发送消息,handleMessage主线程处理消息。完整流程:子线程通过Handler发送消息->消息存入MessageQueue->Looper循环取出消息->回调对应Handler的handleMessage方法->主线程执行UI更新逻辑。6.Handler内存泄漏原因及解决方案泄漏原因:非静态内部类Handler会隐式持有外部Activity引用。当页面关闭时,如果消息队列还有未执行/延迟执行的消息,消息会持有Handler,Handler持有Activity,导致Activity无法被GC回收,造成内存泄漏。解决方案:1.将Handler声明为静态内部类,消除隐式引用;2.通过弱引用持有Activity实例,避免强引用滞留;3.在ActivityonDestroy中调用removeCallbacksAndMessages(null),清空所有消息和任务;4.优先使用View.post、RxJava、协程替代原生Handler,减少手动管理成本。二、Android进阶核心面试题(性能/内存/卡顿)1.常见的内存泄漏场景及修复方案日常开发高频泄漏场景,都是实战中经常遇到的:1.Handler泄漏:非静态内部类+延迟消息未清空,修复:静态Handler+弱引用+销毁清空消息。2.静态变量持有页面/控件引用:静态变量生命周期大于页面,页面销毁后仍被持有,修复:避免静态持有页面、View,用完置空。3.匿名内部类/线程持有Activity:子线程、异步任务未结束,持有页面引用,修复:页面销毁终止线程、使用静态内部类。4.资源未释放:Bitmap、数据库、文件流、动画、监听未关闭,修复:onDestroy统一释放资源、关闭流、取消监听。5.集合未清空数据:全局List/Map持续添加数据,页面销毁不清理,修复:页面退出清空集合、复用对象。6.单例持有页面引用:单例全局常驻,持有临时页面引用无法释放,修复:单例只持有Application上下文,不持有Activity。2.Android卡顿原理、主线程阻塞原因及优化方案Android系统默认刷新帧率60帧/秒,单帧绘制时间需小于16ms,超过16ms就会丢帧、产生卡顿。所有UI绘制、交互都在主线程,主线程阻塞是卡顿核心原因。常见阻塞原因:1.主线程执行耗时操作:网络请求、文件读写、数据库查询、大量循环计算;2.布局层级过深、过度绘制、重复inflate布局;3.频繁创建销毁对象、大量匿名对象造成GC频繁,抢占主线程资源;4.动画执行过多、回调嵌套冗余、主线程任务堆积。优化方案:1.所有耗时操作全部放到子线程、协程、线程池执行;2.优化布局结构,减少层级,使用merge、include、ViewStub懒加载布局;3.避免过度绘制,去除多余背景、重叠布局,通过开发者工具查看过度绘制区域;4.复用View对象、避免频繁inflate、减少临时对象创建,降低GC频率;5.拆分主线程任务,分批执行,避免一次性大量任务阻塞主线程。3.什么是ANR?触发场景及解决办法ANR全称应用无响应,是主线程阻塞超时后系统弹出的弹窗,提示用户等待或关闭应用。触发超时阈值:1.按键、触摸事件超时5s;2.Service前台服务执行超时20s;3.广播执行超时10s。常见触发场景:主线程耗时网络、主线程读写大文件、主线程数据库批量操作、大量循环计算、锁阻塞主线程。解决方案:1.严格保证主线程只做UI刷新、事件分发,所有耗时操作异步处理;2.广播、服务中避免耗时逻辑,复杂任务交给子线程;3.优化数据库、文件、网络逻辑,分批处理大数据;4.避免主线程死锁、等待子线程任务。4.图片加载优化方案,如何避免OOM图片是内存溢出的核心原因,大图加载极易导致内存占用过高触发OOM,日常优化手段如下:1.图片压缩:根据ImageView尺寸动态采样压缩,通过inSampleSize降低图片分辨率,不加载原图;2.格式选择:优先使用WebP格式,同等清晰度体积更小,减少内存占用;3.三级缓存:内存缓存、磁盘缓存、网络缓存,复用已加载图片,避免重复加载、解码;4.及时回收:页面销毁、图片不用时,主动回收Bitmap资源;5.使用成熟框架:Glide、Coil自带压缩、缓存、复用、自动回收机制,比原生加载更稳定;6.禁止大图一次性加载:超大图使用分块加载策略,局部解码展示。三、Fragment核心面试题1.Fragment生命周期及与Activity生命周期联动Fragment依附于Activity存在,生命周期受宿主Activity影响,核心生命周期除基础的创建、展示、销毁外,独有onAttach、onCreateView、onViewCreated、onDetach方法。核心方法:onAttach:绑定Activity,只执行一次,可获取宿主上下文;onCreate:Fragment实例创建,初始化数据;onCreateView:加载Fragment布局;onViewCreated:布局加载完成,初始化控件、逻辑;onStart、onResume:页面可见、可交互;onPause、onStop:页面暂停、隐藏;onDestroyView:视图销毁,Fragment实例仍存在;onDestroy、onDetach:实例销毁、解除宿主绑定。联动规则:Activity生命周期变化会优先触发,再同步触发Fragment对应生命周期,Activity销毁时,所有依附的Fragment都会依次销毁。2.Fragment重叠问题原因及解决方案原因:页面横竖屏切换、系统内存不足回收Activity后重建,Fragment会被系统自动恢复,而代码中又会主动add一次Fragment,导致重复添加、页面重叠。解决方案:1.重建页面时,先判断Fragment是否已经存在,存在则复用,不重复创建;2.使用replace替代add,直接覆盖原有Fragment,避免叠加;3.保存Fragment状态,通过findFragmentById查找已有实例,复用旧实例;4.禁止页面重建,配置configChanges拦截页面重启。四、网络与框架面试题1.OkHttp核心原理、拦截器执行流程OkHttp是Android主流网络请求框架,核心优势是高效、支持连接复用、请求缓存、拦截扩展。核心组件:Request、Response、Client、Call、Interceptor。核心流程:构建请求Request->OkHttpClient发起请求->生成Call对象->进入拦截器链->建立连接、发送请求、接收响应->返回Response。拦截器执行顺序(责任链模式):1.自定义拦截器:统一添加请求头、参数、日志打印;2.重试拦截器:处理请求失败、重定向重试;3.缓存拦截器:读取本地缓存、写入响应缓存;4.连接拦截器:获取连接池复用连接、建立新连接;5.请求拦截器:真正执行网络IO请求,获取服务端响应。2.Retrofit核心原理Retrofit是基于OkHttp封装的网络框架,核心是注解式编程、动态代理,简化网络请求代码,不负责真正的网络IO,IO全部交由OkHttp完成。核心原理:1.通过接口+注解(GET/POST/Header/Query)定义网络请求规则;2.利用动态代理机制,动态生成接口实现类,解析注解参数、请求方式、请求地址;3.将解析后的请求封装为OkHttpRequest,交由OkHttp执行请求;4.通过转换器(GsonConverter)将服务端返回的原始响应体,自动解析为实体类,简化数据解析。3.网络请求常见问题及优化常见问题:重复请求、请求堆积、无网络容错、超时异常、数据缓存、弱网适配。优化方案:1.防抖处理:短时间内相同请求只执行一次,取消重复请求;2.统一异常处理:封装超时、404、500、token失效、网络异常全局处理;3.缓存策略:优先展示本地缓存,再请求网络更新,提升加载速度;4.超时适配:区分普通网络、弱网、文件上传下载,动态设置超时时间;5.生命周期绑定:页面销毁自动取消未完成请求,避免内存泄漏、页面报错。五、Android系统与适配面试题1.屏幕适配方案对比,日常用什么适配主流适配方案优缺点:1.dp适配:系统自动适配不同屏幕密度,简单易用,缺点是大屏、异形屏会有细微偏差;2.百分比适配:按屏幕比例布局,适配效果好,缺点是兼容性一般,布局书写繁琐;3.smallestWidth适配(主流):根据屏幕最小宽度适配,精准适配所有机型、异形屏、折叠屏,适配度最高,项目通用;4.自适应布局:ConstraintLayout约束布局,通过约束关系适配屏幕,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位笔试-江苏-江苏中西医结合内科(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-广西-广西急诊科(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-广东-广东中医骨伤科学(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-山东-山东流行病学(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-安徽-安徽中药学(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-天津-天津心血管内科(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-北京-北京微生物(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-内蒙古-内蒙古中医临床(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-上海-上海口腔科(医疗招聘)历年参考题库含答案详解
- 2026事业单位工勤技能-黑龙江-黑龙江计算机信息处理员一级高级技师历年参考题库含答案详解
- 酒店前台礼貌礼仪培训
- 中国银行培训员工制度
- 2026年机械工程师校招专业面试题库含答案
- 心内科实习生入科宣教
- 血常规报告临床解读指南
- 2025届天域全国名校协作体浙江省10月联考高三英语答案
- 生物跨学科教学设计课件
- 小学生基础常识问答题及答案
- 孤独症上岗证考试试题集合及答案
- 项目管理新员工培训
- 第三届全国人工智能应用技术技能大赛-工业视觉系统运维员S(人工智能视觉技术应用方向)理论参考试题库(含答案)
评论
0/150
提交评论