【Android面试】Activity生命周期专题

文章目录

  • 一、基础核心题(必问,考察基本功)
    • [1. 请完整说出Activity标准生命周期的所有回调方法,以及正常流程下的执行顺序。](#1. 请完整说出Activity标准生命周期的所有回调方法,以及正常流程下的执行顺序。)
    • [2. 简述每个生命周期回调方法的触发时机、核心作用,以及方法内适合做什么操作、禁止做什么操作。](#2. 简述每个生命周期回调方法的触发时机、核心作用,以及方法内适合做什么操作、禁止做什么操作。)
    • [3. onCreate和onStart的核心区别是什么?onStart和onResume的核心区别是什么?](#3. onCreate和onStart的核心区别是什么?onStart和onResume的核心区别是什么?)
    • [4. onPause和onStop的触发场景有什么不同?两个方法的执行耗时有什么限制?](#4. onPause和onStop的触发场景有什么不同?两个方法的执行耗时有什么限制?)
    • [5. onDestroy方法的触发时机有哪些?这个方法里需要注意哪些事项?](#5. onDestroy方法的触发时机有哪些?这个方法里需要注意哪些事项?)
    • [6. Activity正常关闭退出,生命周期的执行流程是什么?](#6. Activity正常关闭退出,生命周期的执行流程是什么?)
  • 二、场景应用题(高频,考察实战理解)
    • [1. 从Activity A跳转到Activity B,完整的生命周期执行顺序是什么?如果Activity B是透明主题,执行顺序又会发生什么变化?](#1. 从Activity A跳转到Activity B,完整的生命周期执行顺序是什么?如果Activity B是透明主题,执行顺序又会发生什么变化?)
    • [2. 从Activity B返回Activity A,生命周期的执行流程是什么?](#2. 从Activity B返回Activity A,生命周期的执行流程是什么?)
    • [3. 按下Home键退回桌面,再重新打开App回到原Activity,生命周期如何执行?](#3. 按下Home键退回桌面,再重新打开App回到原Activity,生命周期如何执行?)
    • [4. 打开新的对话框样式Activity、悬浮窗,原Activity的生命周期会触发哪些方法?](#4. 打开新的对话框样式Activity、悬浮窗,原Activity的生命周期会触发哪些方法?)
    • [5. 手机屏幕旋转时,Activity的生命周期会如何变化?默认情况下会发生什么?](#5. 手机屏幕旋转时,Activity的生命周期会如何变化?默认情况下会发生什么?)
    • [6. Activity进入分屏模式、悬停模式,生命周期会触发哪些回调?*](#6. Activity进入分屏模式、悬停模式,生命周期会触发哪些回调?*)
    • 7.手机熄屏、亮屏,当前Activity的生命周期执行顺序是什么?*
    • [8. 启动SingleTask、SingleInstance启动模式的Activity,生命周期流程和标准模式有什么差异?*](#8. 启动SingleTask、SingleInstance启动模式的Activity,生命周期流程和标准模式有什么差异?*)
    • 9.在Activity中弹出全局Dialog(非Activity样式),当前Activity生命周期会不会触发回调?为什么?
    • [10. 从Activity A启动带FLAG_ACTIVITY_CLEAR_TOP标记的Activity B,生命周期执行顺序是什么?](#10. 从Activity A启动带FLAG_ACTIVITY_CLEAR_TOP标记的Activity B,生命周期执行顺序是什么?)
    • [11. App在后台被系统回收,用户重新点击桌面图标打开App,生命周期如何执行?](#11. App在后台被系统回收,用户重新点击桌面图标打开App,生命周期如何执行?)
    • [12. Activity A启动Activity B,B再启动C,依次返回A,每一步的生命周期调用顺序是什么?](#12. Activity A启动Activity B,B再启动C,依次返回A,每一步的生命周期调用顺序是什么?)
    • [13. 切换手机语言、切换字体大小、切换深色模式,Activity生命周期会发生什么变化?](#13. 切换手机语言、切换字体大小、切换深色模式,Activity生命周期会发生什么变化?)
    • [14. Activity进入后台后,收到推送通知点击打开App,回到原页面,生命周期调用流程是什么?](#14. Activity进入后台后,收到推送通知点击打开App,回到原页面,生命周期调用流程是什么?)
    • [15. 在Activity的onCreate中调用finish()方法,生命周期会执行哪些方法?顺序是什么?](#15. 在Activity的onCreate中调用finish()方法,生命周期会执行哪些方法?顺序是什么?)
    • 16.使用startActivityForResult和registerForActivityResult启动Activity,原Activity生命周期调用有区别吗?
  • 三、异常生命周期题(进阶,大厂重点)
    • 1.什么情况下会触发Activity的异常销毁?除了屏幕旋转,还有哪些场景?*
    • 2.Activity异常销毁和重建时,会触发哪些额外的生命周期回调?*
    • [3. onSaveInstanceState和onRestoreInstanceState的触发时机、作用分别是什么?两者和生命周期其他方法的执行顺序是什么?*](#3. onSaveInstanceState和onRestoreInstanceState的触发时机、作用分别是什么?两者和生命周期其他方法的执行顺序是什么?*)
    • [4. onSaveInstanceState方法存储的数据,除了在onRestoreInstanceState中获取,还能在哪里获取?](#4. onSaveInstanceState方法存储的数据,除了在onRestoreInstanceState中获取,还能在哪里获取?)
    • [5. Activity正常退出销毁,会不会触发onSaveInstanceState和onRestoreInstanceState?](#5. Activity正常退出销毁,会不会触发onSaveInstanceState和onRestoreInstanceState?)
    • [6. 如何防止Activity屏幕旋转时销毁重建?有哪些实现方式?](#6. 如何防止Activity屏幕旋转时销毁重建?有哪些实现方式?)
    • [7. 系统内存不足时,Activity被回收的优先级是什么?后台Activity一定会被销毁吗?](#7. 系统内存不足时,Activity被回收的优先级是什么?后台Activity一定会被销毁吗?)
  • 四、源码与原理题(高级,深挖底层)
    • [1. Activity生命周期是由谁控制的?简述生命周期的分发流程。*](#1. Activity生命周期是由谁控制的?简述生命周期的分发流程。*)
    • [2. ActivityThread、ActivityManagerService在生命周期中扮演什么角色?*](#2. ActivityThread、ActivityManagerService在生命周期中扮演什么角色?*)
    • 3.为什么onPause方法必须执行完毕,下一个Activity的onResume才会执行?
    • [4. onSaveInstanceState的调用时机是在onStop之前还是之后?源码层面为什么这么设计?](#4. onSaveInstanceState的调用时机是在onStop之前还是之后?源码层面为什么这么设计?)
    • [5. Activity的状态在源码中是如何标记和维护的?](#5. Activity的状态在源码中是如何标记和维护的?)
    • [6. 谈谈你对生命周期感知能力的理解,系统是如何实现生命周期监听的?](#6. 谈谈你对生命周期感知能力的理解,系统是如何实现生命周期监听的?)
  • 五、实战优化与避坑题(大厂必考,贴合工作)
    • [1. 在生命周期方法中执行耗时操作会引发什么问题?哪些生命周期方法严禁做耗时操作?](#1. 在生命周期方法中执行耗时操作会引发什么问题?哪些生命周期方法严禁做耗时操作?)
    • [2. Activity重建时,如何恢复页面数据和状态?有哪些注意事项?](#2. Activity重建时,如何恢复页面数据和状态?有哪些注意事项?)
    • [3. 生命周期中注册广播、绑定服务、初始化控件,对应的解绑、释放操作应该放在哪个生命周期?为什么?](#3. 生命周期中注册广播、绑定服务、初始化控件,对应的解绑、释放操作应该放在哪个生命周期?为什么?)
    • [4. 如何避免Activity生命周期导致的内存泄漏?举几个常见的内存泄漏场景。](#4. 如何避免Activity生命周期导致的内存泄漏?举几个常见的内存泄漏场景。)
    • [5. 多个Activity嵌套跳转,如何管理生命周期,避免出现页面状态异常?](#5. 多个Activity嵌套跳转,如何管理生命周期,避免出现页面状态异常?)
    • [6. Jetpack组件(如ViewModel、Lifecycle)是如何和Activity生命周期结合的?解决了什么问题?](#6. Jetpack组件(如ViewModel、Lifecycle)是如何和Activity生命周期结合的?解决了什么问题?)
    • [7. 如果Activity在onPause或者onStop时被系统杀死,重启后该如何处理?*](#7. 如果Activity在onPause或者onStop时被系统杀死,重启后该如何处理?*)
  • 六、综合拓展题(压轴,考察深度)
    • [1. 对比Activity生命周期和Fragment生命周期,两者的关联和区别是什么?](#1. 对比Activity生命周期和Fragment生命周期,两者的关联和区别是什么?)
    • [2. 说说你对Activity四种启动模式对生命周期影响的理解 *](#2. 说说你对Activity四种启动模式对生命周期影响的理解 *)
    • 3.如果屏蔽Activity的生命周期回调,会出现什么问题?有哪些实现方式?
    • [4. 在组件化、插件化开发中,Activity生命周期管理需要注意哪些问题?](#4. 在组件化、插件化开发中,Activity生命周期管理需要注意哪些问题?)
    • [5. 前台Activity和后台Activity,在生命周期、内存优先级、系统回收机制上有什么不同?](#5. 前台Activity和后台Activity,在生命周期、内存优先级、系统回收机制上有什么不同?)

一、基础核心题(必问,考察基本功)

1. 请完整说出Activity标准生命周期的所有回调方法,以及正常流程下的执行顺序。

答案:标准生命周期七大回调方法:onCreate() → onStart() → onResume() → onPause() → onStop() → onDestroy()。

正常启动流程:onCreate → onStart → onResume。

正常退出销毁流程:onPause → onStop → onDestroy。

2. 简述每个生命周期回调方法的触发时机、核心作用,以及方法内适合做什么操作、禁止做什么操作。

答案:

  • onCreate():Activity创建时触发,只调用一次。核心作用是初始化布局、控件、变量、数据绑定、组件注册。适合:setContentView、初始化控件、注册广播、绑定服务。禁止:执行耗时操作、大量网络请求、循环阻塞。
  • onStart():Activity可见但未获取焦点,无法交互。核心作用是页面可见前的准备。适合:注册监听、加载轻量数据。禁止:耗时操作。
  • onResume():Activity获取焦点,可交互,处于前台运行状态。适合:刷新页面、恢复动画、开启定时任务。禁止:耗时操作、阻塞操作。
  • onPause():Activity失去焦点,仍可见。核心作用是暂停操作、保存临时数据。适合:暂停动画、暂停视频、保存轻量数据、释放独占资源。禁止:耗时操作(系统限制超时,会导致ANR)。
  • onStop():Activity完全不可见。适合:停止动画、释放资源、停止定时任务、保存持久化数据。
  • onDestroy():Activity销毁时触发,只调用一次。适合:解绑服务、注销广播、反注册监听、释放内存、防止内存泄漏。
  • onRestart():Activity从不可见重新变为可见时触发(如Home键返回)。适合:恢复页面状态、重新加载数据。

3. onCreate和onStart的核心区别是什么?onStart和onResume的核心区别是什么?

答案:

  • onCreate与onStart:onCreate是Activity首次创建时调用,全局只走一次,侧重初始化;onStart是Activity变为可见时调用,可多次调用(如从后台返回),侧重页面展示准备。
  • onStart与onResume:onStart时Activity可见但不可交互,未获取焦点;onResume时Activity可见且可交互,拿到焦点,处于前台运行状态。

4. onPause和onStop的触发场景有什么不同?两个方法的执行耗时有什么限制?

答案:

触发场景差异:

  • onPause:Activity失去焦点,但仍部分/全部可见(如跳转透明Activity、弹出Dialog样式Activity)。
  • onStop:Activity完全被遮挡,彻底不可见(如跳转普通全屏Activity、按Home键退后台)。
    耗时限制:onPause有严格耗时限制,系统规定执行时长不能超过500ms,超时会触发ANR,且必须等onPause执行完,下一个Activity才能执行onResume;onStop耗时限制宽松,可做稍重操作,但依然不建议耗时太久。

5. onDestroy方法的触发时机有哪些?这个方法里需要注意哪些事项?

答案:
触发时机 :1. 主动调用finish()关闭Activity;2. 系统内存不足回收页面;3. 配置变更(旋转屏幕、切换语言)导致重建销毁;4. 用户手动划掉后台进程。

注意事项:必须在该方法内完成资源释放,比如解绑服务、注销广播接收器、反注册事件监听、关闭线程、清空静态引用、释放Bitmap等,严防内存泄漏;禁止在onDestroy里执行耗时操作和异步任务。

6. Activity正常关闭退出,生命周期的执行流程是什么?

答案:当前Activity执行:onPause() → onStop() → onDestroy()。

如果是从A关闭返回B,额外加上B的生命周期:A.onPause → B.onRestart → B.onStart → B.onResume → A.onStop → A.onDestroy。

二、场景应用题(高频,考察实战理解)

1. 从Activity A跳转到Activity B,完整的生命周期执行顺序是什么?如果Activity B是透明主题,执行顺序又会发生什么变化?

答案:

普通全屏B:A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop。

透明主题B:A.onPause → B.onCreate → B.onStart → B.onResume;A不会执行onStop,因为A始终可见。

2. 从Activity B返回Activity A,生命周期的执行流程是什么?

答案:B.onPause → A.onRestart → A.onStart → A.onResume → B.onStop → B.onDestroy。

3. 按下Home键退回桌面,再重新打开App回到原Activity,生命周期如何执行?

答案:

按Home键:当前Activity.onPause → onStop。

重新打开:Activity.onRestart → onStart → onResume。

4. 打开新的对话框样式Activity、悬浮窗,原Activity的生命周期会触发哪些方法?

答案:打开Dialog样式Activity:原Activity只执行onPause,不执行onStop,因为原页面依然可见;

打开系统悬浮窗/普通全局Dialog:原Activity生命周期无任何回调,因为未触发Activity焦点切换。

5. 手机屏幕旋转时,Activity的生命周期会如何变化?默认情况下会发生什么?

答案:默认情况下,屏幕旋转会触发Activity销毁重建,生命周期顺序:onPause → onStop → onDestroy → onCreate → onStart → onResume;

过程中会触发onSaveInstanceState(保存数据)和onRestoreInstanceState(恢复数据)。

6. Activity进入分屏模式、悬停模式,生命周期会触发哪些回调?*

答案:进入分屏/悬停模式:Activity执行onPause → onStop;

退出分屏/悬停恢复全屏:Activity执行onRestart → onStart → onResume;

分屏状态下失去焦点切换到另一个App:仅执行onPause,不执行onStop。

7.手机熄屏、亮屏,当前Activity的生命周期执行顺序是什么?*

答案:

熄屏:Activity.onPause → onStop。

亮屏解锁:Activity.onRestart → onStart → onResume。

8. 启动SingleTask、SingleInstance启动模式的Activity,生命周期流程和标准模式有什么差异?*

答案:

  • SingleTask:如果栈内已有实例,不会创建新实例,会清空栈内上方Activity,回调已存在实例的onNewIntent,再执行onRestart→onStart→onResume;无实例则正常走创建流程。
  • SingleInstance:单独占用一个任务栈,首次启动正常创建,后续启动复用实例,回调onNewIntent,生命周期和SingleTask类似,不会重复创建。
  • 标准模式:每次启动都创建新实例,执行完整的onCreate→onStart→onResume。

9.在Activity中弹出全局Dialog(非Activity样式),当前Activity生命周期会不会触发回调?为什么?

答案:不会触发任何生命周期回调。因为全局Dialog属于Window层面的弹窗,没有创建新的Activity,不会改变当前Activity的焦点状态和可见性,所以生命周期无变化。

10. 从Activity A启动带FLAG_ACTIVITY_CLEAR_TOP标记的Activity B,生命周期执行顺序是什么?

答案:分两种情况:

  1. B已在栈内:A.onPause → B.onNewIntent → B.onRestart → B.onStart → B.onResume → A.onStop → A.onDestroy。
  2. B不在栈内:A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop。

11. App在后台被系统回收,用户重新点击桌面图标打开App,生命周期如何执行?

答案:不会执行onRestart,会重新走完整的创建流程:onCreate → onStart → onResume;

可通过onCreate里的savedInstanceState参数判断是否为重建恢复。

12. Activity A启动Activity B,B再启动C,依次返回A,每一步的生命周期调用顺序是什么?

A→B:A.onPause → B.onCreate → B.onStart → B.onResume → A.onStop。

B→C:B.onPause → C.onCreate → C.onStart → C.onResume → B.onStop。

C→B:C.onPause → B.onRestart → B.onStart → B.onResume → C.onStop → C.onDestroy。

B→A:B.onPause → A.onRestart → A.onStart → A.onResume → B.onStop → B.onDestroy。

13. 切换手机语言、切换字体大小、切换深色模式,Activity生命周期会发生什么变化?

答案:和屏幕旋转一致,默认会触发Activity销毁重建,执行顺序:onPause → onSaveInstanceState → onStop → onDestroy → onCreate → onRestoreInstanceState → onStart → onResume。

14. Activity进入后台后,收到推送通知点击打开App,回到原页面,生命周期调用流程是什么?

答案:如果Activity未被回收:onRestart → onStart → onResume。

如果Activity被系统回收:重新执行onCreate → onStart → onResume。

15. 在Activity的onCreate中调用finish()方法,生命周期会执行哪些方法?顺序是什么?

答案:onCreate → finish() → onPause → onStop → onDestroy;

不会执行onStart和onResume,页面创建后立刻销毁。

16.使用startActivityForResult和registerForActivityResult启动Activity,原Activity生命周期调用有区别吗?

答案:生命周期流程完全一致,没有区别。两者只是结果回调方式不同,不会影响生命周期的执行顺序和触发时机。

三、异常生命周期题(进阶,大厂重点)

1.什么情况下会触发Activity的异常销毁?除了屏幕旋转,还有哪些场景?*

答案:异常销毁指系统因配置变化或资源紧张,主动销毁Activity,非用户主动关闭。

常见场景:1. 屏幕旋转、切换分辨率;2. 切换系统语言、字体、主题、深色模式;3. 系统内存不足,回收后台Activity;4. 权限变更;5. 输入法切换导致配置改变。

2.Activity异常销毁和重建时,会触发哪些额外的生命周期回调?*

答案:会触发两个额外方法:

  • onSaveInstanceState(Bundle outState):销毁前保存页面数据。
  • onRestoreInstanceState(Bundle savedInstanceState):重建时恢复数据,也可在onCreate中恢复。

3. onSaveInstanceState和onRestoreInstanceState的触发时机、作用分别是什么?两者和生命周期其他方法的执行顺序是什么?*

答案:

触发时机与作用:

  • onSaveInstanceState:异常销毁前触发(正常销毁不触发),作用是保存页面临时数据(如输入框内容、滚动位置)。
  • onRestoreInstanceState:重建时触发,作用是恢复onSaveInstanceState保存的数据。
    执行顺序:
    异常销毁:onPause → onSaveInstanceState → onStop → onDestroy。
    重建:onCreate → onRestoreInstanceState → onStart → onResume。

4. onSaveInstanceState方法存储的数据,除了在onRestoreInstanceState中获取,还能在哪里获取?

答案:还可以在onCreate(Bundle savedInstanceState)中获取,通过判断savedInstanceState是否为null,来区分是首次创建还是重建。

5. Activity正常退出销毁,会不会触发onSaveInstanceState和onRestoreInstanceState?

答案:不会。这两个方法只在Activity异常销毁、需要重建时才触发;用户主动调用finish()、返回键关闭页面,属于正常销毁,不会触发。

6. 如何防止Activity屏幕旋转时销毁重建?有哪些实现方式?

答案:常用两种方式:

  1. 清单文件配置:在Activity标签添加android:configChanges="orientation|screenSize|keyboardHidden",拦截配置变更,不重建,回调onConfigurationChanged。
  2. 代码处理:监听旋转事件,手动处理布局,不依赖系统重建。

7. 系统内存不足时,Activity被回收的优先级是什么?后台Activity一定会被销毁吗?

答案:

回收优先级(从高到低):空进程(无Activity) > 后台进程(不可见Activity) > 服务进程 > 前台进程(可见Activity)。

后台Activity不一定被销毁,系统会按优先级回收,只有内存极度紧张时,才会销毁后台Activity。

四、源码与原理题(高级,深挖底层)

1. Activity生命周期是由谁控制的?简述生命周期的分发流程。*

答案:生命周期由AMS(ActivityManagerService)和ActivityThread(主线程)共同控制。

分发流程:AMS决策Activity状态 → 通过Binder通信通知ApplicationThread → ActivityThread接收消息 → 调用H(Handler)切换主线程 → 反射调用Activity对应的生命周期方法。

2. ActivityThread、ActivityManagerService在生命周期中扮演什么角色?*

答案:

  • AMS:系统服务,负责管理所有App的Activity生命周期、任务栈、进程优先级,做决策和调度。
  • ActivityThread:App的主线程类,管理App内所有Activity,接收AMS指令,执行生命周期回调,处理页面创建、销毁等逻辑。

3.为什么onPause方法必须执行完毕,下一个Activity的onResume才会执行?

答案:系统源码层面做了同步阻塞设计,为了保证页面切换的连贯性,防止两个Activity同时处于前台交互状态,避免界面错乱和数据冲突。onPause是原子操作,必须执行完成,AMS才会下发下一个Activity的onResume指令。

4. onSaveInstanceState的调用时机是在onStop之前还是之后?源码层面为什么这么设计?

答案:在onStop之前调用。

源码设计原因:保证页面停止前,数据已经完成保存,防止onStop执行过程中Activity被突然杀死,导致数据丢失。

5. Activity的状态在源码中是如何标记和维护的?

答案:源码中通过Activity的成员变量mActivityInfo、mState维护状态,AMS端用ActivityRecord记录每个Activity的状态(初始化、可见、前台、销毁等),通过枚举值标记生命周期阶段,ActivityThread同步维护状态,保证两端状态一致。

6. 谈谈你对生命周期感知能力的理解,系统是如何实现生命周期监听的?

答案:生命周期感知指组件能感知Activity/Fragment的生命周期变化,自动做适配操作(如Jetpack Lifecycle)。

实现原理:通过ReportFragment(无界面空白Fragment)注入到Activity,监听Activity生命周期并分发;利用观察者模式,注册观察者,生命周期变化时通知所有注册对象。

五、实战优化与避坑题(大厂必考,贴合工作)

1. 在生命周期方法中执行耗时操作会引发什么问题?哪些生命周期方法严禁做耗时操作?

答案:

引发问题:ANR(应用无响应)、页面卡顿、启动慢、生命周期阻塞。

严禁耗时操作的方法:onCreate、onStart、onResume、onPause,尤其是onPause,超时直接触发ANR。

2. Activity重建时,如何恢复页面数据和状态?有哪些注意事项?

答案:

恢复方式:1. 重写onSaveInstanceState保存数据;2. 在onCreate或onRestoreInstanceState中取出数据恢复。

注意事项:仅保存轻量数据,禁止存大量数据和Bitmap;区分正常创建和重建(判断savedInstanceState是否为空);配合ViewModel使用,数据保存更稳定。

3. 生命周期中注册广播、绑定服务、初始化控件,对应的解绑、释放操作应该放在哪个生命周期?为什么?

答案:

注册/绑定放在onCreate(只执行一次),解绑/释放放在onDestroy(防止多次注册);

临时注册监听可放在onStart,解绑放在onStop;

核心原因:配对执行,避免漏解绑导致内存泄漏、资源浪费、重复注册。

4. 如何避免Activity生命周期导致的内存泄漏?举几个常见的内存泄漏场景。

答案:

常见泄漏场景:单例持有Activity引用、非静态内部类/匿名内部类(Handler、线程)、未注销广播/监听、资源未关闭(Cursor、流)、Bitmap未回收。

避免方式:用弱引用、静态内部类+Handler.removeCallbacks;及时注销组件;onDestroy释放所有引用;使用LeakCanary检测。

5. 多个Activity嵌套跳转,如何管理生命周期,避免出现页面状态异常?

答案:1. 合理设置启动模式,防止栈混乱;2. 避免在onPause/onStop做耗时操作;3. 状态保存与恢复到位;4. 关闭不需要的Activity;5. 用Lifecycle感知生命周期,统一管理资源。

6. Jetpack组件(如ViewModel、Lifecycle)是如何和Activity生命周期结合的?解决了什么问题?

答案:

  • Lifecycle:通过观察者模式,无感监听生命周期,自动处理资源启停。
  • ViewModel:独立于生命周期,Activity重建时数据不丢失,生命周期销毁时自动清理数据。
    解决问题:防止内存泄漏、数据丢失、生命周期代码冗余、页面状态异常。

7. 如果Activity在onPause或者onStop时被系统杀死,重启后该如何处理?*

答案:1. 利用onSaveInstanceState保存关键数据;2. 重启后在onCreate恢复数据;3. 检查页面状态,重新加载数据;4. 恢复用户操作现场,提升体验;5. 避免强依赖前台状态,做好容错处理。

六、综合拓展题(压轴,考察深度)

1. 对比Activity生命周期和Fragment生命周期,两者的关联和区别是什么?

答案:

关联:Fragment生命周期依赖Activity,跟随Activity触发(如Activity.onPause→Fragment.onPause)。

区别:Fragment有独立生命周期(onAttach、onCreateView、onDestroyView),可动态添加/移除;Activity是页面载体,生命周期更完整;Fragment生命周期更细,侧重视图管理。

2. 说说你对Activity四种启动模式对生命周期影响的理解 *

答案:

  • standard:每次启动新建实例,完整生命周期。
  • singleTop:栈顶复用,不新建,回调onNewIntent。
  • singleTask:栈内复用,清空上方Activity,回调onNewIntent。
  • singleInstance:单实例栈,复用,回调onNewIntent。
    核心影响:standard会频繁创建销毁,其他模式复用实例,减少生命周期调用,节省内存。

3.如果屏蔽Activity的生命周期回调,会出现什么问题?有哪些实现方式?

答案:

出现问题:资源无法释放、内存泄漏、页面不显示、数据不保存、ANR、应用崩溃。

实现方式:重写生命周期方法不调用super;反射拦截生命周期调用;篡改AMS调度逻辑(系统级操作)。

4. 在组件化、插件化开发中,Activity生命周期管理需要注意哪些问题?

答案:1. 跨组件跳转生命周期同步;2. 插件Activity生命周期代理;3. 防止资源泄漏;4. 栈管理统一;5. 重建恢复适配;6. 生命周期监听分发正常。

5. 前台Activity和后台Activity,在生命周期、内存优先级、系统回收机制上有什么不同?

答案:

  • 生命周期:前台处于onResume,可交互;后台处于onStop,不可见。
  • 内存优先级:前台优先级极高,后台优先级低。
  • 回收机制:前台几乎不回收,后台按内存紧张程度回收。
相关推荐
chehaoman2 小时前
MySQL的索引
android·数据库·mysql
乾坤一气杀3 小时前
Kotlin 协程原理详解 —— 以 delay 为例
面试
NAGNIP4 小时前
面试官:给我讲一下卷积吧!
算法·面试
NAGNIP5 小时前
一文搞懂卷积神经网络!
算法·面试
恋猫de小郭5 小时前
React Native 鸿蒙 2026 路线发布,为什么它的适配成本那么高?
android·前端·react native
ccLianLian5 小时前
leetcode-hot100
算法·leetcode·职场和发展
张元清5 小时前
使用 Hooks 构建无障碍 React 组件
前端·javascript·面试
studyForMokey5 小时前
【Android面试】窗口机制专题
android·面试·职场和发展
萍萍学习6 小时前
蓝桥杯JAVA-4
java·职场和发展·蓝桥杯