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

下载本文档

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

文档简介

Android开发高频面试题及详细答案(实战版)一、Android基础核心面试题1.简述Android系统四层架构及各层作用Android系统从下到上分为四层,日常开发主要接触上层两层,底层两层为系统支撑,具体如下:(1)Linux内核层:是整个系统的底层基石,基于Linux内核裁剪优化。主要提供硬件驱动、进程管理、内存管理、电源管理、网络协议栈、安全权限机制等核心基础能力,所有上层功能都依赖内核调度硬件资源。(2)系统运行库层:包含C/C++原生库和Android运行环境。原生库提供图形渲染、音频解码、数据库、动画等底层能力;运行环境早期是Dalvik虚拟机,Android5.0后替换为ART虚拟机,实现应用代码的编译和运行。(3)应用框架层:开发者核心依赖的层,提供大量系统API和管理服务,比如四大组件管理、通知管理、窗口管理、网络管理、资源管理等。我们开发应用时调用的系统方法、使用的组件能力,全部来自这一层。(4)应用层:用户直接使用的应用,包括系统自带应用(短信、相机、通讯录)和第三方开发应用(抖音、微信等),也是日常业务开发的最终落地层。2.简述APK打包安装流程整个流程分为编译打包、安装解析、运行加载三个阶段,完整流程如下:1.资源编译:通过AAPT工具编译布局、图片、字符串等资源,生成资源索引文件R.java,同时打包资源文件。2.代码编译:Java代码编译成class字节码文件,再通过DX工具将所有class文件转换为dex文件(精简字节码,适配移动端虚拟机)。3.打包签名:将dex文件、资源文件、配置文件、so库等整合,生成未签名APK,再通过签名文件完成签名,生成正式可安装APK。4.系统安装:系统PackageManagerService解析APK,校验签名合法性、解压文件、优化dex文件,生成odex/dex2oat优化文件,同时注册应用信息、权限、组件信息到系统。5.运行启动:点击应用图标时,系统创建新进程,启动ART虚拟机,加载优化后的dex文件,初始化应用,启动入口Activity。3.Android进程和线程的区别?应用默认进程特点进程:是系统资源分配的最小单位,独立占有内存、CPU资源,进程之间数据隔离、互不干扰。一个崩溃的进程不会影响其他进程。线程:是CPU调度的最小单位,依附于进程存在,一个进程包含多个线程,线程共享进程的内存资源。单个线程崩溃会直接导致整个进程崩溃。应用默认进程特点:Android应用默认是单进程单线程模型,主线程(UI线程)负责所有UI绘制、事件分发、生命周期回调。子线程无法操作UI,主线程不能做耗时操作,否则会触发ANR卡顿。4.什么是ANR?触发场景及解决方案ANR全称应用无响应,是系统检测到应用主线程阻塞超时后弹出的弹窗,本质是主线程被耗时操作占用,无法及时响应用户交互和系统回调。四大触发场景:按键、触摸事件超时:前台5s内未响应BroadcastReceiver广播超时:前台10s、后台60sService服务超时:前台20s、后台200sContentProvider数据访问超时:10s核心解决方案:所有耗时操作(网络请求、文件读写、数据库操作、复杂计算)全部放到子线程执行避免主线程嵌套循环、大量耗时逻辑、锁等待广播、服务中精简逻辑,只做轻量化操作,耗时任务移交子线程使用异步框架、协程、Handler机制拆分主线程任务二、四大组件高频面试题1.Activity完整生命周期及各方法作用Activity核心7个生命周期方法,对应页面创建、展示、暂停、销毁完整流程:onCreate():页面首次创建时调用,仅执行一次。用于初始化布局、控件、数据、适配器,不做耗时操作。onStart():页面可见但未获取焦点,即将进入前台,可多次调用。用于注册广播、初始化动画、开启监听。onResume():页面完全可见、获取焦点,可交互,可多次调用。用于恢复暂停的任务、刷新页面数据。onPause():页面失去焦点、部分遮挡,可多次调用。用于暂停视频、动画、保存临时数据,禁止耗时操作。onStop():页面完全不可见,后台运行,可多次调用。用于释放资源、停止网络请求、注销监听。onDestroy():页面销毁,仅执行一次。用于彻底释放所有资源、关闭数据库、取消请求、解绑观察者。onRestart():页面从后台切换回前台时调用,触发stop后重启流程。2.Activity四种启动模式及适用场景启动模式用于控制Activity栈的实例创建规则,解决页面重复创建、栈堆叠混乱问题:standard(标准模式):默认模式,每次启动都会新建实例,压入当前任务栈。适用于新闻、详情页等可重复打开的页面。singleTop(栈顶复用):如果目标Activity已经在栈顶,直接复用实例,触发onNewIntent,不新建;否则新建。适用于首页、搜索页,避免重复打开。singleTask(栈内复用):栈内存在目标实例,则复用实例,并清空该实例上方所有Activity;否则新建入栈。适用于首页、登录页、主界面,保证全局唯一。singleInstance(全局单例):单独开辟独立任务栈,全局仅此一个实例,其他页面无法进入该栈。适用于系统弹窗、悬浮窗、通话界面等独立页面。3.Service与IntentService区别,后台保活思路核心区别:Service:默认运行在主线程,无异步能力,所有耗时操作需手动开启子线程,不自动销毁,容易内存泄漏、ANR。IntentService:继承自Service,内部封装子线程,自动处理异步任务,任务执行完毕后自动销毁服务,无需手动管理线程和生命周期,适合一次性后台耗时任务。Android后台保活常规思路(合规范围内):开启前台服务,展示通知栏,提升进程优先级,降低被系统回收概率绑定系统常驻进程、利用应用保活白名单双进程守护、服务相互唤醒(高版本系统限制严格)适配系统省电策略、申请后台运行权限、忽略电池优化4.BroadcastReceiver两种注册方式区别静态注册:在AndroidManifest.xml中注册,系统全局监听。应用未启动时,系统可主动唤醒应用接收广播,常驻监听。缺点是占用系统资源,高版本对静态广播限制较多,大部分隐式广播被禁止。动态注册:代码中registerReceiver注册,跟随组件生命周期。页面/服务销毁时需手动注销,否则会内存泄漏。优先级高于静态注册,灵活可控,仅应用运行期间生效,适合临时监听网络、屏幕亮灭、电量变化等。5.ContentProvider作用及原理ContentProvider是Android跨进程数据共享的核心组件,主要用于不同应用之间的数据读写、数据隔离与统一管理,系统通讯录、相册、短信数据都是通过它对外提供访问。原理:基于Binder跨进程通信,封装数据增删改查逻辑,对外统一暴露URI访问接口,屏蔽底层数据库、文件数据细节,同时具备权限校验、数据加密、访问控制能力,保证跨进程数据安全。三、UI与View机制面试题1.View绘制三大流程及核心作用View绘制分为measure、layout、draw三步,自上而下层层传递:measure测量:调用onMeasure,根据父控件约束、布局参数、控件自身属性,测量出View的宽高尺寸,保存测量宽高。layout布局:调用onLayout,父控件根据测量结果,确定子控件在父容器中的位置、上下左右坐标。draw绘制:调用onDraw,通过Canvas画布完成控件绘制,包括背景、边框、文字、图片、自定义图形。2.事件分发机制原理(Touch事件)Android触摸事件分发遵循自上而下分发、自下而上消费规则,核心三个方法:dispatchTouchEvent:事件分发入口,负责将事件向下传递给子ViewonInterceptTouchEvent:仅ViewGroup拥有,判断是否拦截事件,拦截则自己处理,不向下传递onTouchEvent:事件消费方法,返回true表示消费事件,返回false表示不消费,事件向上回溯给父控件完整流程:Activity→根布局ViewGroup→子ViewGroup→子View,事件逐级下发;若子View不消费,事件反向回溯给上层控件处理。3.滑动冲突解决思路常见场景:RecyclerView嵌套滑动、ViewPager嵌套滑动、内外层滚动方向冲突。核心解决两种方案:外部拦截法:重写父控件onInterceptTouchEvent,根据滑动距离、滑动方向、手势角度判断是否拦截事件。横向滑动父控件拦截,纵向滑动放行给子控件。内部拦截法:子控件重写dispatchTouchEvent,通过请求父控件禁止拦截、允许拦截,控制事件传递,适合子控件自主判断滑动场景。4.自定义View步骤及注意事项核心步骤:自定义属性,在xml中声明可配置参数重写构造方法,初始化画笔、配置属性重写onMeasure测量控件宽高,适配wrap_content重写onDraw绘制自定义图形、文字、动画重写onTouchEvent处理手势交互添加刷新机制、状态监听、生命周期适配注意事项:必须适配wrap_content,否则默认填充父容器避免在onDraw中频繁创建对象,防止内存抖动处理屏幕旋转、分辨率适配问题动画、手势及时回收,避免内存泄漏四、性能优化与内存面试题1.常见内存泄漏场景及解决方案高频泄漏场景+解决方式:静态持有Activity/View:静态变量生命周期大于页面,导致页面无法销毁。解决方案:避免静态持有界面控件,使用弱引用。匿名内部类泄漏:Handler、Runnable、异步任务匿名内部类,隐式持有外部Activity引用。解决方案:使用静态内部类+弱引用,页面销毁时清空消息队列。监听未注销:广播、观察者、网络监听、回调未解绑。解决方案:onDestroy中统一注销、解绑所有监听。资源未释放:图片、流、数据库、动画未关闭释放。解决方案:及时close、回收资源、取消动画。单例持有页面引用:单例全局常驻,持有临时页面引用造成泄漏。解决方案:使用弱引用,传入应用上下文而非页面上下文。2.内存抖动原因及优化方案内存抖动是短时间内频繁创建、销毁大量临时对象,导致GC频繁触发,造成页面卡顿、掉帧。常见原因:onDraw、循环、频繁回调中new对象;频繁创建字符串、集合、画笔对象。优化方案:全局复用画笔、布局、集合对象,避免频繁new循环内不创建对象,将对象声明提到循环外使用StringBuilder替代频繁字符串拼接优化自定义View绘制逻辑,减少临时对象创建3.列表卡顿优化(RecyclerView优化)复用机制:开启ViewHolder复用,避免频繁inflate布局预加载与分页:分页加载数据,避免一次性加载大量数据图片优化:图片压缩、三级缓存、按需加载,防止大图卡顿减少onBind耗时:避免在绑定数据时做计算、网络、IO操作局部刷新:使用DiffUtil差分更新,只刷新变化条目,不全局刷新设置固定尺寸:setHasFixedSize避免频繁测量布局异步加载:复杂数据预处理放到子线程,主线程只做赋值渲染4.启动优化思路任务拆分:区分启动必须任务和延迟任务,非核心SDK、初始化、埋点、统计全部延后初始化异步初始化:主线程只做核心初始化,耗时初始化放入子线程、协程异步执行布局优化:减少启动页布局层级、避免过度绘制、减少冗余控件线程优化:合理管理线程池,避免启动阶段大量线程抢占资源资源瘦身:压缩图片、精简资源、移除无用代码和资源文件五、网络与异步机制面试题1.Handler机制原理及消息流程Handler是Android主线程异步通信核心机制,解决子线程无法更新UI、线程间通信问题,核心四组件:Handler:消息发送、处理、回调入口Message:消息载体,携带数据、标记、延迟时间MessageQueue:消息队列,有序存储消息,先进先出Looper:消息循环器,无限循环从队列取出消息,分发到Handler处理完整流程:子线程通过Handler发送Message→消息入队MessageQueue→Looper循环取出消息→回调HandlerhandleMessage方法→主线程执行更新UI逻辑。2.OkHttp核心原理与拦截器流程OkHttp是主流网络请求框架,核心优势是连接复用、请求队列、拦截器机制,支持同步、异步请求。五大核心拦截器(执行顺序):重试拦截器:处理请求失败重试、重定向请求头拦截器:自动补全请求头、Cookie、编码格式缓存拦截器:处理网络缓存、读取缓存、写入缓存连接拦截器:寻找、复用、建立网络连接请求拦截器:真正发起网络请求,获取响应数据3.Retrofit工作原理Retrofit是基于OkHttp封装的RESTful网络框架,核心是动态代理机制,简化网络请求配置。原理:通过注解(GET/POST、参数、请求头)定义网络接口,运行时通过动态代理生成接口实现类,将注解配置解析为OkHttp请求参数,最终由OkHttp完成网络请求,封装响应结果返回给开发者。4.协程优势及使用注意事项核心优势:写法简洁、异步代码同步化,避免回调地狱;轻量级线程,开销远小于线程池;自带生命周期管理、取消机制、异常捕获。注意事项:页面销毁时及时取消协程任务,避免内存泄漏区分主线程调度和子线程调

温馨提示

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

评论

0/150

提交评论