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

下载本文档

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

文档简介

AndroidActivity面试高频题及详细答案(实战版)一、基础认知类1.说说你对Activity的理解Activity是安卓应用四大组件之一,核心作用是承载界面、处理用户交互。我们日常开发中所有的页面,比如登录页、首页、详情页,本质都是Activity。它负责页面的视图加载、事件监听、数据展示和页面跳转,同时由系统统一管理生命周期和任务栈。开发者不需要手动管理页面内存和销毁逻辑,只需在对应的生命周期方法中处理业务即可。简单来说,Activity就是用户能看到、能操作的每一个页面载体。2.Activity和View的区别是什么?很多初学者会混淆两者,核心区别非常清晰:1.职责不同:Activity是页面容器,负责页面生命周期、跳转、业务逻辑处理;View是视图控件,比如按钮、文本、图片,只负责界面绘制和触摸事件。2.层级不同:一个Activity包含一个完整的View树,所有View都依附于Activity存在。3.生命周期不同:Activity有完整的页面生命周期,会随页面创建、暂停、销毁回调;View只有绘制、布局、销毁的简单流程,没有独立页面生命周期。4.交互不同:用户点击、滑动等事件,先由Activity分发,再传递给对应View处理。二、生命周期高频题(重中之重)3.详细说一下Activity完整生命周期及各方法作用Activity完整生命周期分为7个核心方法,我结合实际开发场景说明,不背空洞定义:1.onCreate():页面首次创建时调用,只执行一次。核心用途:初始化布局、控件、适配器、全局变量、网络请求初始化,是页面初始化的核心方法。注意:此时页面还未显示,无法获取控件宽高。2.onStart():页面从不可见变为可见,但还无法交互。执行多次,页面返回、从后台切回都会触发。用途:初始化页面展示数据、刷新界面。3.onResume():页面完全可见,可正常接收用户交互,处于前台活跃状态。执行多次。用途:开启定时器、轮询、视频播放、定位监听等需要前台运行的逻辑。4.onPause():页面失去焦点,部分遮挡或退到后台,无法交互。执行多次。用途:暂停视频、关闭定时器、保存临时数据、停止网络回调,避免后台资源消耗。5.onStop():页面完全不可见,处于后台状态。用途:释放大量资源,比如取消网络请求、销毁动画、释放图片资源。6.onRestart():页面从后台重新回到前台、从不可见变为可见前触发。用途:刷新后台更新的数据,更新页面状态。7.onDestroy():页面销毁,只执行一次。用途:彻底释放所有资源,解绑监听、关闭数据库、释放内存、避免内存泄漏。4.打开新Activity、返回旧Activity,生命周期怎么走?场景一:A页面打开B页面A:onPause->onStop(如果B全屏覆盖A)B:onCreate->onStart->onResume场景二:B页面返回A页面B:onPause->onStop->onDestroyA:onRestart->onStart->onResume补充:如果是弹窗、悬浮窗遮挡A页面,A只会执行onPause,不会执行onStop,页面依旧可见只是失去焦点。5.屏幕旋转时Activity生命周期如何变化?怎么避免页面重建?默认情况下,屏幕横竖屏切换会触发Activity销毁重建,生命周期:onPause->onStop->onDestroy->onCreate->onStart->onResume。原因是屏幕尺寸、配置变更,系统会重新加载页面布局。避免重建的三种实战方案:1.清单文件配置android:configChanges="orientation|screenSize",配置后旋转屏幕不会重建页面,只会触发onConfigurationChanged方法,可在该方法中手动适配布局。2.固定屏幕方向,android:screenOrientation="portrait"竖屏固定,彻底杜绝旋转重建。3.临时保存数据,通过onSaveInstanceState保存临时数据,重建后在onCreate或onRestoreInstanceState恢复数据,避免页面数据丢失。6.onSaveInstanceState什么时候触发?能保存什么数据?触发场景:页面被系统回收、屏幕旋转、切换多任务、横竖屏切换、内存不足销毁前台页面。不会触发场景:用户主动点击返回键关闭页面、主动finish页面。可保存数据:仅支持基本数据类型、序列化数据,比如字符串、数值、布尔值、可序列化对象。不能保存大型对象、网络请求、视图实例。实战用途:解决页面重建后输入框内容、列表位置、页面状态丢失的问题。三、启动模式与任务栈7.Activity四种启动模式及实际应用场景安卓Activity依靠任务栈管理页面,四种启动模式核心是控制页面入栈、复用、销毁规则,面试重点考场景:1.standard(标准模式,默认)每次启动都会创建全新实例,不管栈中是否存在该页面。所有页面默认都是此模式。场景:详情页、资讯页、临时弹窗页面,需要多次打开独立页面的场景。2.singleTop(栈顶复用模式)如果目标页面已经在栈顶,直接复用当前实例,不会新建,会触发onNewIntent;如果不在栈顶,依旧新建实例。场景:首页、个人中心,避免用户多次点击图标重复打开首页。3.singleTask(栈内复用模式)整个任务栈内只要存在该页面实例,就直接复用,同时会清空该页面之上的所有页面,让目标页面处于栈顶,触发onNewIntent。场景:首页、登录页、主界面。比如从多个子页面跳转首页,直接复用首页,清空所有子页面,避免栈内堆积大量页面。4.singleInstance(单例全局模式)单独开辟一个全新任务栈,整个系统中只有这一个实例,独占一个栈,其他页面无法进入该栈。场景:来电界面、系统弹窗、悬浮窗口、独立的全局页面,极少在普通业务项目中使用。8.singleTask会不会触发页面生命周期?onNewIntent什么时候调用?复用页面时,不会执行onCreate、onStart,只会触发onNewIntent->onResume。onNewIntent核心场景:singleTop、singleTask复用页面时调用,用于接收最新的跳转Intent数据,更新页面内容。很多项目中旧数据不刷新,就是因为没在onNewIntent中更新数据。9.任务栈的特点?APP退出后任务栈怎么处理?任务栈是系统用来存储Activity的后进先出栈结构,新页面入栈,返回键出栈销毁。特点:一个APP默认对应一个任务栈,多个页面依次入栈;后台保留时栈内页面会被系统缓存,内存不足时会被回收栈内Activity。APP完全退出(所有页面finish),任务栈清空;退到后台不退出,任务栈保留,再次打开APP会恢复栈顶页面。四、页面跳转与传值10.Activity之间跳转方式及传值方案1.普通跳转:Intent显式跳转,适合同应用页面跳转,精准指定目标Activity。2.隐式跳转:通过action、category、data匹配页面,适合跨组件、跨APP跳转,比如打开系统浏览器、相机。传值方式:-基础数据:Intent直接putExtra传字符串、数字、集合。-对象传值:实现Serializable或Parcelable序列化,Parcelable效率更高,安卓推荐使用。-全局数据:Application、单例、EventBus(临时传值,避免内存泄漏)。11.startActivityForResult和registerForActivityResult的区别startActivityForResult是旧版跳转回传方案,存在明显弊端:请求码、结果码杂乱、嵌套回调繁琐、代码臃肿,在高版本中已经被废弃。registerForActivityResult是官方推荐的新方案,基于契约式实现,代码更简洁、解耦、支持权限申请、页面回传、文件选择,统一回调入口,维护性更好,现在项目全部使用该方式。五、内存泄漏与优化(面试高频加分题)12.Activity常见内存泄漏场景及解决方案1.静态变量持有Activity引用静态变量生命周期大于Activity,页面销毁后静态引用依旧存在,无法回收。解决方案:避免静态持有页面、控件引用,页面销毁时置空静态引用。2.匿名内部类、Handler泄漏匿名内部类默认持有外部Activity引用,延迟消息未处理完就关闭页面,会导致泄漏。解决方案:使用静态内部类+弱引用,页面onDestroy移除所有消息。3.网络请求未取消页面销毁时,正在执行的网络回调持有页面引用。解决方案:在onDestroy取消请求、终止异步任务。4.监听未解绑广播、传感器、定位、事件总线注册后未解绑。解决方案:页面销毁统一解绑所有监听。13.Activity销毁后,还有哪些情况会导致页面无法回收?核心就是页面引用被外部持有:异步任务、静态引用、未解绑监听、全局集合存储页面实例、弹窗/Toast持有上下文。开发中尽量使用Application上下文做非页面展示操作,避免滥用Activity上下文。六、进阶面试题14.Activity的Context和ApplicationContext区别1.生命周期不同:ActivityContext随页面销毁销毁;ApplicationContext随应用进程销毁,全局唯一。2.用途不同:ActivityContext可以操作页面、弹窗、跳转、视图;ApplicationContext只能做全局数据、资源获取、网络请求,不能用于弹窗、页面跳转。3.泄漏风险:长期耗时操作一律用ApplicationContext,避免页面内存泄漏。15.如何彻底关闭整个APP,退出所有Activity?1.维护一个Activity集合,每创建一个页面加入集合,退出时遍历集合全部finish。2.使用singleTask启动模式,跳转到首页并清空所有上层页面。3.调用System.exit(0)直接终止进程,简单粗暴,适合彻底退出场景。16.冷启动、热启动、温启动的区别1.冷启动:APP进程被杀死,点击图标重新启动,需要创建进程、初始化Application、初始化Activity,速度最慢。2.热启动:进程保留,页面全部销毁,重新打开APP,无需初始化

温馨提示

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

评论

0/150

提交评论