Android面试题及详细答案(完整版可直接下载)_第1页
Android面试题及详细答案(完整版可直接下载)_第2页
Android面试题及详细答案(完整版可直接下载)_第3页
Android面试题及详细答案(完整版可直接下载)_第4页
Android面试题及详细答案(完整版可直接下载)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android面试题及详细答案(完整版可直接下载)说明:本题库整理一线互联网企业高频面试真题,内容贴合实际开发,无书面化套话,覆盖初级、中级Android开发面试核心考点,包含基础原理、四大组件、事件机制、性能优化、网络、开源框架、内存问题等核心模块,可直接打印、下载刷题使用。一、Android基础核心面试题1.简述Activity完整生命周期,以及各方法核心作用答案:Activity完整生命周期包含7个核心方法,对应页面创建、显示、暂停、销毁全流程:1.onCreate():页面首次创建时调用,仅执行一次。主要用于初始化布局、控件、全局数据,做一次性初始化操作。2.onStart():页面从不可见变为可见状态,但未获取焦点,无法交互。3.onResume():页面获取焦点,进入可交互状态,是用户正常操作页面的阶段,可开启动画、轮询、定位等前台任务。4.onPause():页面失去焦点、被弹窗遮挡或切换后台,仍部分可见。必须在这里暂停耗时操作、保存临时数据,避免数据丢失。5.onStop():页面完全不可见,后台运行。释放大量资源,停止网络请求、视频播放等耗时任务。6.onRestart():页面从后台重新切换到前台时调用,触发onStart、onResume,无需重复初始化核心数据。7.onDestroy():页面销毁,仅执行一次。彻底释放所有资源,解绑监听、关闭流、销毁定时器,防止内存泄漏。2.Activity横竖屏切换的生命周期变化,如何避免页面重建?答案:默认情况下,横竖屏切换会触发Activity销毁重建,执行onPause→onStop→onDestroy→onCreate→onStart→onResume。避免重建方案:在AndroidManifest.xml对应Activity节点配置android:configChanges="orientation|screenSize|keyboardHidden",配置后切换屏幕不会重建页面,仅触发onConfigurationChanged回调,可手动适配界面布局。3.Application、Activity、Service三者Context的区别与使用场景答案:Context是应用运行环境的抽象类,核心区别在于生命周期和作用范围:1.ApplicationContext:全局单例,生命周期和APP一致,全程不会销毁。适用于全局初始化、获取应用资源、全局弹窗、网络请求全局配置,严禁用于UI相关操作。2.ActivityContext:生命周期跟随页面,绑定UI窗口、主题、布局。专门用于页面弹窗、跳转页面、控件初始化、UI资源获取,页面销毁后该Context失效。3.ServiceContext:生命周期跟随服务,无UI属性,不能操作界面。仅用于后台任务、数据存储、网络请求等非UI操作。核心注意:禁止用ApplicationContext创建Dialog、Toast等UI控件,会导致窗口依附异常、闪退。4.简述Fragment生命周期,Fragment与Activity的通信方式答案:Fragment生命周期依附Activity,核心方法除基础生命周期外,独有onAttach、onCreateView、onDestroyView、onDetach。常用通信方式:1.接口回调:Fragment定义回调接口,Activity实现接口,是最常用、兼容性最好的方式;2.广播通信:适合跨页面、跨组件简单数据传递;3.ViewModel共享:通过Activity作用域ViewModel,实现Fragment和Activity、多Fragment数据共享,生命周期稳定;4.EventBus:简化代码,适合简单场景,复杂场景易造成耦合和内存问题。5.四大组件是什么?各自核心作用及注册要求答案:Android四大组件为Activity、Service、BroadcastReceiver、ContentProvider,均需在清单文件注册:1.Activity:页面载体,负责所有用户界面交互,APP所有可视化页面都依赖Activity;2.Service:后台服务,无界面,用于执行后台耗时任务,如音乐播放、文件下载、后台定位;3.BroadcastReceiver:广播接收器,组件通信、系统事件监听,如网络切换、电量变化、开机启动;4.ContentProvider:数据共享组件,实现跨应用数据读写,比如读取手机通讯录、相册数据,统一数据访问接口。6.有序广播和无序广播、本地广播和全局广播的区别答案:无序广播:同步发送,所有接收者同时接收,无法拦截、无法修改数据,执行效率高,是默认广播类型。有序广播:按接收者优先级排序依次接收,高优先级接收者可通过abortBroadcast()拦截广播,也可修改广播数据后传递给下一级。全局广播:跨应用传播,所有注册对应广播的应用均可接收,存在数据泄露、恶意劫持的安全风险。本地广播:通过LocalBroadcastManager实现,仅在当前APP内传播,不会跨应用,安全无泄露、开销更小、效率更高,日常开发优先使用。二、Android事件分发与UI绘制面试题1.简述View事件分发机制,三大核心方法及执行顺序答案:触摸事件(MotionEvent)分发核心流程:Activity→ViewGroup→View,三大核心方法:1.dispatchTouchEvent():分发事件,所有控件都拥有该方法,返回true表示事件被消费,终止分发;返回false继续传递。2.onInterceptTouchEvent():仅ViewGroup拥有,用于拦截事件,返回true则拦截事件,交由自身onTouchEvent处理,不再向下传递。3.onTouchEvent():处理触摸事件,返回true表示消费事件,返回false表示不消费,事件会向上回传给父控件处理。核心顺序:事件下发层层传递,消费后终止;事件未消费则层层回溯。2.滑动冲突的常见场景及解决方案答案:常见滑动冲突分为两类:1.内外层滑动方向不一致:如ViewPager嵌套ListView、RecyclerView;2.内外层滑动方向一致:如RecyclerView嵌套RecyclerView。解决方案:1.外部拦截法(常用):重写父容器onInterceptTouchEvent,根据滑动距离、方向判断是否拦截滑动事件;2.内部拦截法:子控件通过requestDisallowInterceptTouchEvent(true)禁止父容器拦截事件,适配复杂滑动场景。3.View绘制流程,measure、layout、draw核心作用答案:View绘制三大步骤,执行顺序固定:1.measure():测量控件宽高,根据布局参数、父容器限制计算最终尺寸,多次执行;2.layout():确定控件在父容器中的位置,测量完成后执行,位置无变化则不会重复执行;3.draw():绘制控件内容,包括背景、文字、图片、边框,最终展示到屏幕。补充:requestLayout()会触发measure+layout,不一定触发draw;postInvalidate()可在子线程调用,仅触发重绘,不测量布局。三、Android性能优化面试题(高频)1.常见内存泄漏场景及解决方案答案:开发中高频内存泄漏场景及对应解决方式:1.静态变量持有Activity/View引用:静态变量生命周期大于页面,导致页面无法销毁。解决方案:避免静态持有UI控件,使用弱引用封装。2.匿名内部类、Handler泄漏:内部类隐式持有外部类引用,后台任务未完成时页面销毁,造成泄漏。解决方案:使用静态内部类+弱引用,页面销毁时移除所有消息。3.监听未解绑:广播、观察者、定时器、网络监听未在onDestroy解绑。解决方案:页面销毁统一解绑所有监听、终止任务。4.资源未释放:图片、文件流、数据库、动画资源未关闭释放。解决方案:用完及时回收、关闭资源。5.集合未清空:全局集合持续添加数据,不主动清理。解决方案:页面销毁、场景结束后清空集合。2.RecyclerView性能优化方案答案:RecyclerView是列表核心控件,优化点覆盖加载、缓存、渲染全流程:1.复用优化:开启默认复用机制,避免频繁创建ViewHolder;设置合理缓存池大小,适配多类型列表。2.布局优化:使用ConstraintLayout减少布局层级,避免嵌套过多布局;复杂条目拆分复用布局。3.数据优化:分页加载,一次性不加载过多数据;异步处理数据解析,避免主线程卡顿。4.刷新优化:使用DiffUtil差异化刷新,不全局刷新列表,减少UI重绘开销。5.预加载优化:设置setItemViewCacheSize预缓存条目,开启硬件加速,提升滑动流畅度。3.WebView常见问题及性能、安全优化答案:常见问题:内存泄漏、页面卡顿、加载缓慢、JS注入安全风险。优化方案:1.性能优化:预创建WebView池复用控件;开启DOM缓存、离线缓存;DNS预解析,提前加载核心H5资源;独立进程运行,避免页面崩溃影响主APP。2.内存优化:页面销毁时彻底销毁WebView,清空缓存、移除JS监听,避免内存泄漏。3.安全优化:禁止不安全的JS跳转,校验链接合法性;拦截恶意网址,关闭不必要的权限调用。4.APP启动速度优化方案答案:启动优化核心是减少主线程耗时,区分冷启动、热启动,核心方案:1.主线程减负:Application中禁止耗时初始化,第三方SDK、工具类延迟初始化、异步初始化。2.任务拆分:将启动任务拆分优先级,核心业务优先执行,非核心任务延后至页面渲染完成后执行。3.布局优化:启动页布局极简,减少层级、去除无用控件,避免过度绘制。4.资源优化:压缩图片、精简资源文件,减少启动时资源加载耗时。四、Android网络与数据存储面试题1.OkHttp核心原理及优势答案:OkHttp是目前主流网络请求框架,核心基于拦截器链机制处理网络请求。核心优势:1.支持HTTP/2、SPDY协议,请求效率更高;2.自带连接池,复用网络连接,减少握手耗时,提升请求速度;3.支持请求重试、重定向、超时拦截,稳定性强;4.拦截器机制灵活,可统一处理请求头、响应、日志、缓存、异常;5.同时支持同步、异步请求,适配所有业务场景。2.Retrofit工作原理答案:Retrofit是基于OkHttp封装的RESTful网络框架,核心是动态代理机制:1.通过注解定义网络请求接口、请求方式、参数、地址;2.利用动态代理生成接口实现类,将注解解析为HTTP请求参数;3.底层依托OkHttp完成真实网络请求;4.支持自定义转换器,自动解析Gson、Xml等格式响应数据,简化代码。3.SharedPreferences优缺点及使用注意事项答案:优点:轻量、使用简单、读写便捷,适合存储少量简单键值对数据,如配置信息、登录状态、主题设置。缺点:不支持大数据存储、不支持多线程批量读写、频繁读写会造成ANR、数据不加密安全性低。注意事项:禁止存储大量数据;避免循环频繁commit提交;批量编辑统一apply提交;核心敏感数据需自行加密。4.SQLite数据库使用要点及优化答案:1.单例管理数据库实例,避免频繁创建关闭数据库;2.批量数据操作使用事务,大幅提升读写速度;3.常用查询字段建立索引,减少查询耗时;4.避免主线程执行数据库大批量操作,防止ANR;5.及时关闭Cursor、数据库连接,避免内存泄漏。五、开源框架与进阶面试题1.Glide图片加载框架核心优势及缓存机制答案:Glide是移动端主流图片加载框架,优势:轻量、适配性强、支持动态图、自动适配图片尺寸、低内存占用。三级缓存机制:1.内存缓存:优先读取,速度最快,存放近期加载图片,APP后台可回收;2.磁盘缓存:本地持久化缓存,无网络可读取,缓存原图、压缩图;3.网络缓存:无本地缓存时,从网络请求图片并缓存。核心特点:自动根据ImageView尺寸压缩图片,避免大图加载造成OOM,适配列表滑动加载场景。2.EventBus原理及优缺点答案:EventBus基于发布订阅模式,实现组件间解耦通信。优点:代码简洁、无需复杂回调、跨组件通信便捷,开发效率高。缺点:全局消息分发,层级不清晰,复杂业务易出现消息混乱;未及时注销会导致内存泄漏;不利于后期维护排查问题。使用注意:页面销毁必须unregister,区分消息类型,避免消息泛滥。3.简述Handler消息机制原理答案:Handler机制是Android线程通信核心,实现子线程更新UI,核心四组件:1.Handler:消息发送、处理、回调,绑定对应Looper;2.Message:消息载体,携带数据、标记、执行时间;3.MessageQueue:消息队列,有序存储消息,先进先出;4.Looper:消息循环器,无限循环从队列取出消息,分发到对应Handler处理。核心流程:子线程通过Handler发送Message→消息入队→Looper轮询取出消息→主线程Handler处理消息,完成UI更新。补充:主线程默认初始化Looper,子线程使用Handler需手动创建Looper。4.ANR产生原因及排查方案答案:ANR即应用无响应,主线程阻塞超时触发,系统阈值:1.按键、触摸事件5秒无响应;2.Service前台执行超

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论