Android开发高频面试题及详细答案(实战版)_第1页
Android开发高频面试题及详细答案(实战版)_第2页
Android开发高频面试题及详细答案(实战版)_第3页
Android开发高频面试题及详细答案(实战版)_第4页
Android开发高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

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

文档简介

Android开发高频面试题及详细答案(实战版)一、Android基础核心面试题1.简述Android四大组件及各自作用四大组件是Android应用的核心基础,分别是Activity、Service、BroadcastReceiver、ContentProvider,分工明确且相互配合:Activity:界面载体,负责和用户直接交互,展示UI、处理用户点击、滑动等操作,是应用页面的核心,所有可视化页面都基于Activity实现。Service:后台服务,无界面,专门用于执行后台耗时、常驻任务,比如后台播放音乐、文件下载、数据同步、保活推送等,不依赖页面前台展示。BroadcastReceiver:广播接收器,属于全局消息通信组件,用于接收系统或应用自定义的广播消息,比如网络状态变化、电池电量过低、开机启动、APP安装卸载等事件监听。ContentProvider:数据共享组件,主要用于跨应用数据交互,统一封装数据的增删改查接口,实现本应用数据对外共享,也可以读取系统数据(通讯录、相册、短信),保证数据访问的安全性和规范性。2.Activity完整生命周期及各方法场景Activity生命周期是页面从创建到销毁的完整过程,核心7个方法,对应不同页面状态,实际开发中高频使用:onCreate():页面首次创建调用,只执行一次。用于初始化布局、控件、全局变量、数据初始化,不做耗时操作。onStart():页面可见但未获取焦点,可多次执行。页面从后台返回前台、新建页面都会触发,用于开启动画、注册非耗时监听。onResume():页面获取焦点,可交互状态,多次执行。核心交互初始化,比如开启轮询、视频播放、页面刷新。onPause():页面失去焦点,暂停交互,多次执行。用于暂停视频、关闭轮询、保存临时数据,禁止耗时操作。onStop():页面完全不可见,多次执行。释放大量资源,比如停止网络请求、关闭动画、注销监听。onDestroy():页面销毁,只执行一次。彻底释放所有资源,解绑控件、取消请求、关闭数据库、释放内存,防止内存泄漏。onRestart():页面从不可见恢复可见(后台切前台),多次执行。介于onStop和onStart之间,无需重复初始化数据。补充:页面横竖屏切换时,默认会销毁重建,依次执行onPause->onStop->onDestroy->onCreate->onStart->onResume。3.Activity启动模式及适用场景启动模式用于控制Activity栈的实例创建规则,解决页面重复创建、栈堆积问题,共4种:standard(默认):每次启动都新建实例,无论栈中是否存在。适用于详情页、内容展示页等可重复打开的页面。singleTop:栈顶复用模式。如果目标页面在栈顶,直接复用,触发onNewIntent;不在栈顶则新建。适用于首页、搜索页,防止重复打开同一页面。singleTask:栈内复用模式。栈内存在目标实例,直接复用,并清空该页面之上的所有页面;不存在则新建。适用于首页、登录页、主界面,返回直接退出页面栈。singleInstance:全局单例模式。独立开辟专属任务栈,全局唯一实例。适用于系统级弹窗、悬浮窗页面、独立功能页面。4.横竖屏切换的生命周期变化及解决方案默认情况下,横竖屏切换会触发Activity销毁重建,完整执行一遍销毁和创建生命周期,会导致临时数据丢失、页面状态重置。解决方案:静态固定屏幕方向:在AndroidManifest中配置android:screenOrientation="portrait"固定竖屏,彻底避免重建。动态保存状态:重写onSaveInstanceState保存临时数据,在onCreate或onRestoreInstanceState恢复数据。配置configChanges:设置android:configChanges="orientation|screenSize",切换屏幕不会销毁重建,仅触发onConfigurationChanged回调,自行处理页面适配。5.Handler机制原理及消息流程Handler是Android线程通信的核心,主要解决子线程无法更新UI的问题,实现线程间消息传递、任务调度。核心组成:Handler、Message、MessageQueue、Looper。完整消息流程:子线程/主线程通过Handler发送Message(消息)或Runnable任务;Handler将消息存入当前线程绑定的MessageQueue(消息队列),队列采用先进先出规则;Looper(消息循环器)无限循环从MessageQueue中取出消息;Looper将取出的消息回调给对应Handler的handleMessage方法;主线程Handler在handleMessage中更新UI,完成线程通信。核心关键点:主线程默认初始化Looper和MessageQueue,子线程需要手动调用Looper.prepare()和Looper.loop()才能使用Handler;一个线程对应一个Looper、一个消息队列,可对应多个Handler。6.Handler内存泄漏原因及解决方案泄漏原因:主线程Handler属于非静态内部类,会隐式持有外部Activity引用。当Activity关闭时,若Handler存在未执行的延时消息,消息会持续持有Activity引用,导致Activity无法被GC回收,引发内存泄漏。解决方案:将Handler定义为静态内部类,消除隐式外部引用;使用弱引用持有Activity实例,弱引用对象可被GC正常回收;在Activity的onDestroy方法中,调用handler.removeCallbacksAndMessages(null)清空所有未执行消息,彻底切断引用。二、UI与View机制面试题1.View的绘制流程View绘制三大核心步骤,从父布局到子布局逐层执行:measure(测量):调用onMeasure(),根据父布局约束、自身布局参数,测量出View的宽高尺寸,保存测量宽高。layout(布局):调用onLayout(),父布局根据测量结果,确定子View在屏幕中的位置(left、top、right、bottom)。draw(绘制):调用onDraw(),根据测量尺寸和布局位置,绘制画布、文字、图片、背景等内容,渲染到屏幕。补充:invalidate()触发重新绘制(只执行draw),requestLayout()触发重新测量+布局+绘制。2.事件分发机制原理(Touch事件)Android触摸事件由Activity分发,逐层传递到ViewGroup、子View,核心三个方法:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。分发流程:事件从Activity下发到根ViewGroup,ViewGroup执行dispatchTouchEvent分发事件;ViewGroup先执行onInterceptTouchEvent判断是否拦截事件,返回true则拦截,自己处理事件;返回false则下发给子View;子View接收事件后执行onTouchEvent,返回true表示消费事件,事件终止;返回false则事件回传给上层控件处理。核心规则:事件从上到下分发,从下到上消费;一旦事件被消费,后续同系列事件(滑动、抬起)只会交给消费控件处理。3.滑动冲突的解决方式常见冲突:ScrollView嵌套RecyclerView、ViewPager嵌套滑动控件,核心是内外层滑动方向冲突。两种主流解决方案:外部拦截法(常用):重写父容器onInterceptTouchEvent,根据滑动距离、方向判断是否拦截事件。比如横向滑动交给子控件,纵向滑动交给父容器。内部拦截法:重写子控件dispatchTouchEvent,通过requestDisallowInterceptTouchEvent(true)禁止父容器拦截事件,子控件需要滑动时主动抢占事件。三、性能优化面试题(高频实战)1.Android常见内存泄漏场景及修复方案日常开发最常见的6种泄漏场景,均为实战高频问题:Handler泄漏:非静态内部类Handler持有页面引用,延时消息未执行。修复:静态Handler+弱引用+页面销毁清空消息。单例泄漏:单例持有Activity/Context引用,页面销毁后单例仍持有引用。修复:使用ApplicationContext,不传入页面Context。静态变量泄漏:静态集合、静态控件持有页面资源。修复:页面销毁时清空静态集合、置空控件引用。监听未注销:广播、事件总线、传感器监听注册后未解绑。修复:onDestroy统一注销所有监听。匿名内部类泄漏:子线程、Runnable匿名内部类持有页面引用,后台任务未结束。修复:使用静态内部类,页面销毁终止线程。Bitmap未回收:大图资源未释放。修复:页面销毁recycle位图,使用图片加载框架统一管理。2.ListView卡顿优化方案ListView卡顿核心原因:频繁创建View、频繁调用findViewById、大图加载卡顿、滑动刷新频繁。优化方案:复用ConvertView:利用系统缓存的旧View,避免每次getView都inflate新布局;ViewHolder缓存机制:缓存控件引用,避免重复调用findViewById,减少IO耗时;图片异步加载+压缩:子线程加载图片,压缩图片分辨率,避免主线程阻塞;滑动暂停加载:列表快速滑动时暂停图片加载,滑动停止后再加载,减少卡顿;减少Item布局层级:简化布局,减少嵌套层级,降低绘制耗时。3.RecyclerView相比ListView的优势及优化核心优势:复用机制更完善:自带ViewPool缓存,支持多级缓存,复用效率远高于ListView;布局灵活:支持线性、网格、瀑布流多种布局,可动态切换;增量更新:DiffUtil差异化刷新,只更新变化的Item,无需全局刷新;自带动画、分割线、嵌套滑动适配,扩展性更强。RecyclerView高频优化:开启硬件加速,优化绘制速度;设置固定尺寸setHasFixedSize(true),避免频繁测量布局;使用DiffUtil替代notifyDataSetChanged全局刷新;预加载、分页加载,避免一次性加载大量数据;优化Item布局,减少过度绘制。4.APP启动速度优化APP启动分为冷启动、热启动、温启动,优化核心是减少主线程耗时任务。优化方案:主线程避免耗时操作:将第三方初始化、数据预加载、数据库操作放到子线程、延迟初始化;简化启动页布局:减少启动页布局层级、去掉多余绘制、避免卡顿;延迟初始化非核心组件:非刚需SDK、推送、统计工具延迟到首页渲染完成后初始化;优化AndroidManifest配置,减少启动时组件扫描耗时;开启代码混淆、资源压缩,减小安装包体积,提升加载速度。四、网络与数据存储面试题1.OkHttp核心原理及优势OkHttp是安卓主流网络请求框架,核心基于拦截器链机制实现网络请求,替代原生HttpURLConnection。核心优势:支持HTTP/2、SPDY协议,多路复用,同一域名多请求共享连接;自带连接池,复用网络连接,减少握手耗时,提升请求效率;支持请求、响应拦截,可统一处理日志、请求头、签名、缓存;支持自动重连、超时重试、断点续传,稳定性更强;支持同步、异步请求,适配所有网络场景。拦截器执行流程:自定义拦截器>桥接拦截器>缓存拦截器>连接拦截器>网络拦截器,逐层处理请求与响应。2.Retrofit工作原理Retrofit是基于OkHttp封装的注解式网络框架,专注接口封装,不负责底层网络请求,底层依赖OkHttp。核心原理:通过动态代理模式,将开发者定义的网络接口、注解(GET、POST、参数、请求头)解析为网络请求参数;将接口方法转化为OkHttp的Request请求对象;通过OkHttp执行网络请求,获取Response;通过转换器(Gson、FastJson)将响应体解析为实体类,返回结果。3.Android四种数据存储方式及区别SharedPreferences:轻量级键值对存储,存储少量简单数据(配置、开关、用户信息),不支持大数据、不支持事务,读写速度快。SQLite数据库:轻量级关系型数据库,支持增删改查、事务、索引,适合存储大量结构化数据(列表数据、本地缓存数据)。文件存储:原生IO读写文件,适合存储图片、日志、文本文件,自由度高,无格式限制。ContentProvider:跨应用数据共享存储,主要用于对外提供数据访问接口,不用于本地常规存储。五、Jetpack核心组件面试题1.ViewModel原理及优势ViewModel是Jetpack用于存储页面数据的组件,专门解决页面销毁重建数据丢失、代码耦合问题。核心原理:ViewModel生命周期独立于Activity,页面横竖屏切换、临时销毁时,ViewModel不会被重建,数据可以保留;只有页面彻底销毁(退出页面)时,ViewModel才会清空。优势:自动保存页面数据,避免销毁重建数据丢失;分离视图与业务逻辑,解耦UI和数据处理;支持页面数据共享,同一Activity下多个Fragment可共享同一个ViewModel;无需手动管理生命周期,框架自动回收资源。2.LiveData核心原理LiveData是可观察的数据持有者,具备生命周期感知能力,只会给处于活跃状态(STARTED、RESUMED)的页面发送数据更新,避免无效回调和内存泄漏。核心特点:生命周期感知,自动管理订阅,页面销毁自动取消观察,无内存泄漏;数据粘性:新订阅者会自动接收最新的数据;保证数据更新精准,避免无效UI刷新;配合ViewModel使用,实现单向数据流。3.DataBinding优缺点优点:取消findViewById,减少模板代码;实现数据与UI双向绑定,数据自动刷新视图;布局和业务解耦,代码更简洁。缺点:编译速度变慢;报错日志不直观,排查问题难度大;复杂布局绑定逻辑繁琐,适配性较差。六、进阶高频面试题1.线程池原理及Android常用线程池线程池核心是复用线程,避免频繁创建、销毁线程造成的性能损耗,统一管理后台任务。核心参数:核心线程数、最大线程数、空闲等待时间、任务队列、拒绝策略。An

温馨提示

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

评论

0/150

提交评论