版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android高频面试题库及详细答案(实战完整版)一、Android基础核心面试题1.简述Android四大组件及各自作用Android四大组件是Android应用的核心基础,各司其职、相互配合实现应用所有功能,具体作用如下:Activity:页面载体,负责和用户交互,承载界面展示、事件点击、页面跳转逻辑,是用户可见的界面单元,一个应用的所有可视化页面都依托Activity实现。Service:后台服务,无界面,专门用于处理后台耗时、常驻任务,比如后台播放音乐、文件下载、数据同步、保活任务等,不依赖页面前台展示。BroadcastReceiver(广播接收器):全局消息监听组件,用于接收系统或应用自定义的广播消息,实现跨组件、跨应用通信。常见场景:监听网络切换、电量变化、开机启动、APP推送消息接收等。ContentProvider(内容提供者):数据共享组件,主要实现跨应用数据读写和共享,统一数据访问接口。系统自带的通讯录、相册、短信数据都是通过该组件对外暴露,开发者也可自定义实现自有数据共享。2.详细说说Activity生命周期及各方法场景Activity生命周期是页面从创建、显示、交互、暂停、销毁的完整过程,核心7个方法,对应不同页面状态:onCreate():页面首次创建时调用,仅执行一次。用于初始化布局、控件、全局变量、数据初始化,不能做耗时操作。onStart():页面从不可见变为可见(未获取焦点),可多次调用。比如页面从后台返回、跳转新页面返回当前页时触发。onResume():页面获取焦点,可与用户交互,多次调用。页面正常展示、可点击操作,适合重启暂停的任务(如视频播放、动画)。onPause():页面失去焦点,暂停交互,多次调用。跳转新页面、弹出弹窗、锁屏时触发,用于暂停耗时任务、保存临时数据、释放资源。onStop():页面完全不可见,多次调用。页面被新页面覆盖、退到后台时触发,释放更多资源,停止网络请求、停止动画。onDestroy():页面销毁,仅执行一次。关闭页面、退出应用时触发,彻底释放所有资源,解绑监听、关闭数据流、销毁线程。onRestart():页面从后台不可见转为前台可见,在onStop之后、onStart之前触发,多用于页面重新展示时刷新数据。完整流程:新建页面=>onCreate=>onStart=>onResume;页面退后台=>onPause=>onStop;页面重回前台=>onRestart=>onStart=>onResume;关闭页面=>onPause=>onStop=>onDestroy。3.Activity四种启动模式及实际应用场景standard(标准模式):默认模式。每次启动Activity都会新建实例,不管任务栈中是否存在该页面。适合首页、详情页等无复用需求的页面。singleTop(栈顶复用):如果目标Activity位于任务栈栈顶,直接复用实例,触发onNewIntent,不新建页面;否则新建实例。适合登录页、广告页,避免重复打开同一顶部页面。singleTask(栈内复用):任务栈内仅存在一个实例,启动页面时,若栈内已有该实例,会清空该实例上方所有页面,复用当前实例并触发onNewIntent。适合首页、主页面,跳转主页时清空所有次级页面。singleInstance(单例模式):独立专属任务栈,全局只有一个实例,独占一个栈。适合系统级页面、弹窗页面、通话页面,保证全局唯一。4.横竖屏切换Activity生命周期变化及解决方案默认情况下,横竖屏切换会触发Activity销毁重建,执行:onPause->onStop->onDestroy->onCreate->onStart->onResume。原因:横竖屏布局资源、屏幕尺寸变化,系统会重新加载布局,重建页面实例。解决方案:固定屏幕方向:在清单文件中设置android:screenOrientation="portrait"(竖屏)/landscape(横屏),禁止切换,杜绝重建。配置configChanges属性:设置android:configChanges="orientation|screenSize",切换屏幕时不会重建页面,仅触发onConfigurationChanged方法,可手动适配布局。数据保存恢复:重写onSaveInstanceState保存临时数据,onRestoreInstanceState恢复数据,避免重建后数据丢失。5.Application生命周期及作用Application是整个应用的全局上下文,应用启动时自动初始化,全局唯一,生命周期贯穿整个应用。核心方法:onCreate():应用初始化时调用,仅一次。用于全局初始化,比如第三方SDK初始化、全局参数配置、日志初始化、崩溃捕获配置。onLowMemory():系统内存不足时触发,主动释放缓存、图片、闲置资源,防止应用被系统回收。onTrimMemory():根据系统内存状态分级回收资源,比onLowMemory更精细,适配不同内存紧张场景。二、Service与广播高频面试题1.Service两种启动方式、区别及应用场景Service分为startService和bindService两种启动方式,核心区别如下:(1)startService启动启动后服务长期后台运行,独立于页面,和启动组件无绑定关系。启动组件销毁,服务依然运行。生命周期:onCreate->onStartCommand->onDestroy。场景:后台下载、后台播放音乐、定时任务、常驻后台同步数据。(2)bindService绑定启动服务和启动组件绑定,组件销毁,服务自动解绑销毁。可获取服务的Binder实例,实现跨组件方法调用、数据交互。生命周期:onCreate->onBind->onUnbind->onDestroy。场景:页面需要调用后台服务方法、实时获取后台任务进度(如下载进度、播放进度)。2.Service能否在后台一直保活?主流保活方案原生Android无法实现绝对永久保活,系统为了省电和流畅度,会在内存不足、应用后台闲置时回收后台服务,高版本系统对后台管控更严格。主流保活适配方案:前台服务:设置Service为前台服务,展示常驻通知,系统优先级极高,不易被回收,适配Android高版本后台限制。双进程守护:两个服务互相监听,一方被销毁则拉起另一方,适配旧版本系统。闹钟定时唤醒:通过AlarmManager、WorkManager定时拉起服务,实现间断保活。白名单适配:引导用户开启应用后台自启动、电池无限制、后台运行权限,适配国内厂商系统(小米、华为、OPPO等)。3.有序广播和无序广播的区别无序广播(普通广播):全局同步发送,所有接收器同时接收,无序、不可截断、不可终止,效率高。多用于普通系统状态监听。有序广播:按照接收器优先级依次接收,优先级高的先接收,可截断广播,后续接收器无法收到消息,可传递数据。多用于需要优先级控制、消息拦截的业务场景。三、Android数据存储面试题1.Android五种数据存储方式及适用场景SharedPreferences:轻量级键值对存储,存储少量简单数据(字符串、数值、布尔值)。适合存储配置信息、登录状态、主题设置、缓存标记。不适合存储大量数据,卡顿、读写效率低。内部存储:私有目录存储,数据仅当前应用可访问,卸载应用数据清空。适合存储私密缓存、临时文件。外部存储:公共存储目录,所有应用可访问,可存储大文件。适合存储图片、视频、安装包、导出文件。SQLite数据库:轻量级关系型数据库,支持增删改查、事务、索引。适合存储结构化、大量、需要频繁增删改查的本地数据(聊天记录、本地列表数据)。ContentProvider:跨应用数据共享存储,依托数据库实现数据对外共享。2.SharedPreferences优缺点及注意事项优点:使用简单、轻量、无需手动创建文件,系统自动封装读写逻辑,适合配置类数据持久化。缺点:不支持大数据存储、不支持多线程批量操作、读写会阻塞主线程、无法存储对象和复杂数据,全量写入,修改单个key会重写整个文件。注意事项:禁止在主线程频繁读写;不适合存储列表、大量数据;apply异步提交无回调,commit同步提交有返回值,耗时需子线程执行;避免key重复导致数据覆盖。3.SQLite事务作用及使用场景事务可以保证一组数据库操作要么全部成功,要么全部失败回滚,保证数据一致性。场景:批量插入数据、批量更新、数据同步、转账类数据操作,避免部分成功部分失败导致数据错乱。同时事务可以大幅提升批量操作数据库的效率,减少IO次数。四、网络与异步面试题1.为什么不能在主线程请求网络?Android主线程负责UI绘制和事件分发,主线程阻塞会导致界面卡顿、ANR(应用无响应)。网络请求属于耗时IO操作,耗时不确定,极易阻塞主线程。同时Android4.0以上系统强制禁止主线程网络请求,会直接抛出异常。所有网络请求必须放在子线程执行。2.Handler机制原理、消息循环机制Handler是Android线程通信核心,核心作用是子线程更新UI、线程间通信,整套机制由4个核心类组成:Handler:消息发送和处理者,sendMessage发送消息,handleMessage处理消息。Message:消息载体,携带what、arg1、arg2、obj数据。MessageQueue:消息队列,先进先出,存储所有待处理的Message。Looper:消息循环器,无限循环从MessageQueue取出消息,分发到对应Handler处理。主线程默认自带Looper,子线程需要手动创建Looper并开启循环。执行流程:子线程通过Handler发送Message->消息存入MessageQueue->Looper轮询取出消息->回调HandlerhandleMessage方法(主线程执行)->更新UI。3.Handler内存泄漏原因及解决方案泄漏原因:非静态内部类Handler会隐式持有外部Activity引用。Message持有Handler引用,消息队列未处理的Message会长期持有引用,导致Activity销毁后无法被GC回收,引发内存泄漏。解决方案:将Handler声明为静态内部类,切断隐式外部引用;使用弱引用持有Activity上下文,避免强引用滞留;页面销毁时(onDestroy)调用removeCallbacksAndMessages(null),清空所有未处理消息和任务。4.AsyncTask优缺点及废弃原因优点:封装了子线程和主线程切换,使用简单,无需手动操作Handler,适合轻量耗时任务。缺点:生命周期和Activity不同步,页面销毁任务仍在执行,易造成内存泄漏;默认单线程串行执行,批量任务效率低;适配复杂异步场景能力差。废弃原因:Android官方认为其线程调度机制不完善、并发能力弱、容易引发内存泄漏和页面空指针,推荐使用Kotlin协程、RxJava、线程池替代。5.OkHttp、Retrofit核心原理OkHttp:底层网络请求框架,负责真实的HTTP请求,核心优势是支持连接池复用、请求拦截、缓存、超时重试、HTTPS适配,高效管理网络连接,减少频繁创建销毁连接的开销。Retrofit:基于OkHttp封装的网络请求框架,属于接口封装工具。通过注解配置请求地址、参数、请求方式,动态代理生成请求实例,简化网络代码,支持统一数据解析、拦截器、请求适配,是目前主流Android网络框架。五、自定义View面试题1.View绘制三大流程及作用View绘制完整流程:测量(onMeasure)、布局(onLayout)、绘制(onDraw)onMeasure:测量View的宽高,根据父容器约束、布局参数计算最终尺寸,解决View大小不确定的问题。onLayout:确定View在父容器中的位置,ViewGroup会遍历子View,调用子View的layout方法确定摆放位置。onDraw:绘制自身内容,通过Canvas画布绘制文字、图形、图片,实现自定义UI效果。2.invalidate()和requestLayout()区别invalidate():触发onDraw重绘,只刷新绘制内容,不重新测量、布局,无尺寸和位置变化,适合UI内容更新、颜色刷新。requestLayout():触发onMeasure、onLayout,重新测量尺寸和布局位置,不会主动触发onDraw。适合View大小、位置发生变化的场景。3.自定义View解决滑动冲突的方案常见冲突:外层ScrollView/横向滑动布局与内部RecyclerView/ViewPager滑动冲突。主流两种解决方案:(1)外部拦截法(父布局拦截)重写父布局onInterceptTouchEvent方法,根据滑动方向、手势偏移量判断是否拦截事件。需要父布局滑动时拦截,交给子View滑动时放行,适合大部分滑动冲突场景。(2)内部拦截法(子布局请求)子布局重写dispatchTouchEvent,通过requestDisallowInterceptTouchEvent(true)禁止父布局拦截事件,子布局自主处理滑动事件,适合子View滑动优先级更高的场景。六、性能优化高频面试题1.Android卡顿优化方案卡顿核心原因:主线程耗时、UI绘制超时、过度绘制、内存抖动。优化方向如下:主线程优化:所有耗时操作(网络、数据库、文件解析、大图处理)全部移至子线程;布局优化:减少布局层级,减少嵌套,使用ConstraintLayout替代多层LinearLayout、RelativeLayout;删除无效控件、隐藏无用布局;过度绘制优化:减少同一区域重复绘制,去除多余背景色,通过开发者工具查看过度绘制区域并整改;列表优化:RecyclerView复用机制,优化Adapter逻辑,onBindViewHolder不做耗时操作,预加载优化、图片缩略展示;动画优化:避免频繁刷新UI,减少属性动画高频回调操作。2.内存泄漏常见场景及优化方案常见内存泄漏场景:静态变量持有Activity引用;非静态Handler、匿名内部类持有页面引用;广播、监听、回调未解绑;集合、单例长期持有对象引用;资源(图片、流、动画)未及时释放。通用解决方案:页面销毁及时解绑所有监听、清空集合、取消任务;使用弱引用替代强引用;避免静态持有页面上下文;及时关闭IO流、释放资源。3.图片优化方案图片压缩:根据控件尺寸动态压缩图片,避免加载超大原图;采用质量压缩、尺寸压缩;格式适配:优先使用WebP格式,体积更小、清晰度更高;三级缓存:内存缓存、磁盘缓存、网络缓存,避免重复加载图片;复用Bitmap:使用BitmapFactory.Options复用内存,减少内存开辟;框架优化:使用Glide、Coil框架,自动适配压缩、缓存、复用逻辑。4.启动优化怎么做?任务拆分:将Application中大量初始化任务拆分,核心任务主线程初始化,非核心任务延迟初始化、子线程异步初始化;任务并行:利用线程池并行执行初始化任务,缩短启动耗时;延迟加载:首页渲染完成后再初始化第三方SDK、非核心配置;减少阻塞:启动阶段禁止耗时IO、数据库操作、网络请求;工具检测:通过Launcher启动耗时工具、Trace工具定位卡顿任务,针对性优化。七、Android进阶原理面试题1.进程和线程的区别进程:资源分配的最小单位,独立占用内存资源,进程之间数据隔离、互不干扰,一个应用默认单进程,可开启多进程。线程:CPU调度的最小单位,依附进程存在,同一进程内所有线程共享内存资源,线程切换开销小,用于处理并发任务。Android主线程(UI线程)专门负责UI绘制,子线程负责耗时任务,避免阻塞主线程。2.ANR产生原因及规避方案ANR即应用无响应,主线程阻塞超时系统弹出弹窗,核心是主线程卡顿超时。触发场景:Activity按键、触摸事件5s未响应;BroadcastReceiver前台广播10s未执行完毕;Service前台服务20s未执行完毕。规避方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位笔试-北京-北京心理学(医疗招聘)历年参考题库含答案详解
- 2026事业单位笔试-上海-上海妇幼保健学(医疗招聘)历年参考题库含答案详解
- 2026事业单位工勤技能-黑龙江-黑龙江计算机操作员三级(高级工)历年参考题库含答案详解
- 2026事业单位工勤技能-黑龙江-黑龙江检验员四级(中级工)历年参考题库含答案详解
- 2027届湖北恩施白杨七上数学期末教学质量检测模拟试题含解析
- 2027届山东省济宁市曲阜市九上数学期末综合测试模拟试题含解析
- 宁夏中学卫市宣和中学2027届数学八上期末教学质量检测试题含解析
- 宁夏银川外国语实验学校2027届数学八上期末考试试题含解析
- 苏州市吴江区2027届八上数学期末达标检测模拟试题含解析
- 2027届广东省东莞市高埗英华学校数学九上期末达标检测模拟试题含解析
- 第一单元 《县委书记的榜样-焦裕禄》《2020中国抗疫记》 联读课件
- 石油化工企业反恐防爆应急预案
- 苹果电脑macOS效率手册
- 3500个英语基础词汇
- 模型16 全等三角形-半角模型-原卷版
- AQ/T 1023-2006 煤矿井下低压供电系统及装备通 用安全技术要求(正式版)
- 耳尖放血疗法技术评分表
- 前列腺穿刺活检的护理
- 中式面点师(高级)职业资格证考试题库(带答案)
- 电子元器件英语词汇中英文对照表全套
- 华友岗位职级图
评论
0/150
提交评论