版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android面试题及详细答案(真实职场版)一、Android基础核心面试题1.讲一下Android四大组件及各自作用四大组件包括Activity、Service、BroadcastReceiver、ContentProvider,都是系统核心组件,必须在清单文件注册才能使用。Activity:页面载体,负责和用户交互,承载所有UI展示、点击、滑动等用户操作,是应用的页面基础单元。每个页面都对应一个Activity,有完整的生命周期。Service:后台服务,无界面,专门用来处理后台耗时、长期运行的任务,比如后台播放音乐、文件下载、数据同步、保活任务等,不依赖页面前台展示。BroadcastReceiver:广播接收器,属于全局消息订阅机制,用来接收系统或应用自定义的广播事件,比如网络切换、电量变化、开机启动、APP内部页面通信等,分为静态注册和动态注册。ContentProvider:数据共享组件,主要用于跨应用数据共享,系统通讯录、相册、短信数据都是通过它对外提供访问,也可以实现本应用不同组件、不同进程之间的数据统一读写和权限管控。2.Activity完整生命周期及常用场景完整生命周期方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy(),还有两个辅助方法onRestart()。onCreate:页面第一次创建调用,只执行一次,用于初始化布局、控件、数据、适配器、全局参数。onStart:页面可见但不可交互,从后台返回前台、新页面启动都会触发,适合注册监听、初始化轻量资源。onResume:页面获取焦点,可正常和用户交互,频繁触发,适合开启动画、刷新页面数据、开启轮询。onPause:页面失去焦点,暂停交互,适合停止动画、暂停轮询、保存临时数据、释放占用资源。onStop:页面完全不可见,适合释放大量资源、取消网络请求、停止后台任务。onRestart:页面从不可见变回可见状态,比如从后台切回前台、关闭上层页面返回当前页。onDestroy:页面销毁,只执行一次,用于彻底释放资源、解绑监听、关闭数据库、销毁线程,防止内存泄漏。3.Activity四种启动模式及实际应用场景standard(标准模式):默认模式,每次启动都会新建一个新实例,不管栈中是否存在该页面。适合首页、详情页这类可以重复打开的页面。singleTop(栈顶复用):如果目标页面在栈顶,直接复用,不会新建,只触发onNewIntent;不在栈顶则新建实例。适合登录页、弹窗页面,防止重复打开。singleTask(栈内复用):整个任务栈内只保留一个实例,启动时如果栈内存在该页面,会清空该页面之上的所有页面,复用当前页面。适合首页、主界面、商城主页,返回直接退出主页面之上的所有层级。singleInstance(单例模式):独立开辟一个全新任务栈,全局只有这一个实例,独占整个栈。适合系统级页面、弹窗浮窗、独立的设置页面,极少业务使用。4.横竖屏切换Activity生命周期变化及解决方案默认情况下,横竖屏切换会触发Activity销毁重建,执行onPause→onStop→onDestroy→onCreate→onStart→onResume,会导致页面数据丢失、网络请求重复、页面状态重置。解决方案:1.清单文件配置android:configChanges="orientation|screenSize",切换屏幕不重建Activity,只会触发onConfigurationChanged方法,自行处理适配;2.通过onSaveInstanceState保存临时数据,重建后在onRestoreInstanceState恢复数据;3.固定屏幕方向,禁止横竖屏切换。二、Service与广播核心题1.Service两种启动方式、区别及使用场景startService启动:生命周期独立于页面,启动后后台长期运行,不受Activity页面销毁影响,停止只能手动stopService。适合长期后台任务,如下载、数据同步、日志上传。bindService绑定启动:和绑定的组件生命周期联动,页面销毁解绑Service自动销毁,支持跨组件通信、回调交互。适合需要和页面实时交互的场景,如音乐播放控制、进度回调。两种方式可以混用,Service会同时具备后台常驻和交互能力,需要同时stop和unbind才能彻底销毁。2.广播静态注册和动态注册的区别静态注册:在清单文件中注册,APP未启动、后台休眠状态下也能接收广播,系统全局生效。缺点是开销大、部分高版本系统限制静态广播,多用于开机启动、系统状态监听。动态注册:代码中注册,跟随组件生命周期,页面销毁必须解绑,否则会内存泄漏。优先级高、响应快、开销小,只在APP运行期间生效,多用于页面内网络监听、状态刷新。三、UI与View机制面试题1.View绘制流程三大步骤整体流程:measure(测量)→layout(布局)→draw(绘制)measure测量:遍历View树,测量每个View的宽高,根据父容器约束和自身布局参数,确定最终尺寸,回调onMeasure。layout布局:确定View在父容器中的位置、上下左右坐标,回调onLayout,ViewGroup会遍历子View布局。draw绘制:绘制背景、边框、文字、图片、前景,回调onDraw,完成页面渲染展示。2.invalidate()和requestLayout()区别invalidate():只触发draw绘制,不会重新测量和布局,适合仅UI样式、内容变化的刷新,比如文字变色、图片切换,效率高。requestLayout():触发measure+layout+draw完整流程,适合View宽高、位置发生变化的场景,比如动态修改控件尺寸、权重、布局参数,开销更大。3.事件分发机制(点击事件传递流程)核心流程:Activity→ViewGroup→View,三大核心方法:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。1.事件由Activity的dispatchTouchEvent下发;2.ViewGroup先执行onInterceptTouchEvent判断是否拦截事件,拦截则自己处理,不拦截则下发子View;3.子View接收事件,执行onTouchEvent处理点击、滑动;4.子View不消费事件,事件会层层回溯给父容器处理,最终交给Activity。滑动冲突解决方案:外部拦截法(父ViewGroup按需拦截)、内部拦截法(子View主动申请事件控制权)。四、内存优化与性能优化1.Android常见内存泄漏场景及解决办法1.静态变量持有Activity/View引用:静态变量生命周期大于页面,导致页面无法回收。解决:避免静态持有页面、控件引用,使用弱引用。2.匿名内部类、Handler泄漏:匿名内部类默认持有外部类引用,延迟消息未处理会导致页面销毁无法回收。解决:使用静态Handler+弱引用,页面销毁移除所有消息。3.广播、监听未解绑:动态注册广播、事件监听页面销毁未注销。解决:onDestroy中统一解绑、移除监听。4.单例持有页面引用:单例全局常驻,持有页面引用造成泄漏。解决:单例只持有Application上下文,不持有页面上下文。5.资源未释放:图片、数据库、文件流、线程未关闭释放。解决:页面销毁主动关闭资源、终止线程。2.怎么做APP卡顿优化APP卡顿核心原因是主线程耗时过多、UI绘制阻塞、任务堆积。优化手段:1.主线程只做UI刷新,所有网络请求、文件读写、数据解析、耗时计算全部放到子线程;2.减少布局层级,避免过度嵌套,使用ConstraintLayout替代LinearLayout多层嵌套;3.减少onDraw、onMeasure中耗时操作,避免频繁创建对象;4.图片优化:压缩图片、适配分辨率、复用图片内存、避免大图加载;5.任务分片,使用Handler、Coroutine、RxJava拆分耗时任务,避免一次性阻塞主线程;6.上线开启卡顿检测,通过日志定位耗时方法、卡顿堆栈。3.弱引用、软引用、虚引用区别及使用场景强引用:默认引用,只要存在引用,GC永远不会回收,是内存泄漏主要来源。软引用:内存充足不回收,内存不足时GC回收。适合缓存图片、临时缓存数据。弱引用:只要触发GC就会被回收,生命周期短。适合解决Handler、监听的内存泄漏。虚引用:最弱引用,无法获取对象实例,仅用于监听对象回收状态,底层内存监控使用,业务基本不用。五、网络与数据存储1.Http和Https区别1.Http明文传输,无加密,数据容易被劫持、篡改、窃听,端口80;Https基于SSL/TLS加密传输,安全可靠,端口443;2.Http无状态、无连接;Https需要握手认证,建立连接耗时更长;3.Https需要证书校验,防止中间人攻击,适配现在所有上线APP的网络要求。2.常用网络框架原理(Retrofit+OkHttp)OkHttp:底层网络请求核心,负责连接池复用、请求拦截、缓存、重试、超时处理,统一管理TCP连接,减少频繁创建连接的开销。Retrofit:基于OkHttp的封装框架,通过动态代理将接口注解(GET/POST、参数、请求头)转换成真实的Http请求,简化网络代码,支持统一解析、回调封装、适配协程。3.Android数据存储方式及适用场景SharedPreferences:轻量键值对存储,适合存储配置、开关、登录状态、用户基础设置,不适合存储大量数据、频繁读写。SQLite数据库:结构化本地数据库,适合存储大量结构化数据,如本地列表、历史记录、离线数据,支持增删改查、事务。文件存储:读写txt、json、图片、日志文件,适合存储大文件、缓存资源、本地日志。ContentProvider:跨应用、跨进程数据共享存储。六、进阶与源码、项目实战题1.Handler消息机制原理核心组成:Handler、Message、MessageQueue、Looper。1.Handler:消息发送、消息处理,子线程通过Handler发送消息到主线程,用于线程间通信;2.Message:消息载体,携带what、arg、obj数据;3.MessageQueue:消息队列,先进先出,存储所有待处理消息;4.Looper:消息循环器,无限循环从队列取出消息,分发到Handler处理。主线程默认初始化Looper,子线程使用Handler需要手动prepare和loop,否则会报错。2.为什么主线程不能耗时、子线程不能更新UI1.主线程负责UI绘制、事件分发、页面刷新,一旦耗时会阻塞消息循环,导致页面卡顿、ANR;2.AndroidUI控件不是线程安全的,多线程同时操作UI会导致界面错乱、绘制异常、闪退,系统通过ViewRootImpl做线程校验,非主线程更新UI直接抛出异常。3.ANR是什么?触发场景和规避方案ANR即应用无响应,系统检测到主线程长时间阻塞无响应,弹出卡死弹窗。触发场景:1.主线程阻塞5秒以上(按键、触摸事件无响应);2.Service前台超时20秒、后台超时200秒;3.广播处理超时10秒。规避方案:所有耗时操作异步处理,主线程只做UI刷新,避免死循环、同步阻塞、网络耗时。4.项目中做过的性能优化总结(面试通用话术)在项目中主要从卡顿、内存、启动、流量、包体五个方向做优化:1.卡顿优化:梳理主线程耗时任务,全部异步处理,优化布局层级,减少过度绘制,分片加载数据;2.内存优化:修复Handler、监听、静态引用等常见内存泄漏,图片统一压缩复用,避免频繁创建对象,使用内存检测工具排查问题;3.启动优化:拆分启动任务,区分优先级,主线程只放核心初始化,非核心任务异步延迟初始化,减少启动耗时;4.网络优化:封装统一网络请求,做缓存、重试、超时处理,避免重复请求,分页加载列表数据;5.包体优化:压缩资源图片、剔除无用资源、混淆代码、精简第三方依赖,减小安装包大小。七、Kotlin基础面试题(现代Android必备)1.变量var和val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级下期劳技教学计划(模板十一篇)
- 2026年校招:滴滴笔试题及答案
- 2026年校招:诚信集团笔试题及答案
- 2026年科学教育与科学教育科学思维训练课件
- 2026年校招:锦江集团笔试题及答案
- 2026年建筑工程施工质量事故应急演练评估改进专项训练题库
- 2026年机械制造工艺学实验指导与习题
- 深圳南山 2026 年短视频剪辑岗位入职技能测试试卷 招聘 22 人
- 2026年质量大数据高级研发师招聘笔试试卷 招录11人题库
- 2026年能效提升高级咨询师招聘笔试试卷 招录9人王牌题库
- 中国慢性乙型肝炎功能性(临床)治愈临床实践专家共识课件
- 苏少版美术四年级上册第三课《精彩的表达》教学课件
- 航空文化考试题及答案解析
- 2027物理步步高 大一轮复习第六章 微点突破3 机车启动问题
- 2026年辽宁省中考数学试卷(含答案及解析)
- GB/T 24002.2-2026环境管理体系针对环境主题领域应用GB/T 24001管理环境因素和应对环境状况的指南第2部分:水
- 聚变装置-氚聚变设施和聚变燃料处理设施的密封和通风系统的设计和操作标准标准立项发展报告
- 家装水电施工工艺标准
- 2026中国气象量子计算技术研发进展与产业化前景
- 赣州市属国企招聘笔试题库2026
- 自动识别系统(AIS)检验指南
评论
0/150
提交评论