0
点赞
收藏
分享

微信扫一扫

Android:Activity的生命周期、拓展分析

Ad大成 2022-03-11 阅读 131

文章目录

前言

这篇记录笔者在复习Activity生命周期及其拓展

一、常见生命周期

一般地,我们认为我们日常开发需要使用和了解的生命周期大致有如下六类

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestory()
    在这里插入图片描述
    我们一般通过是否可交互/可见/可存在来区分以上的生命周期

更详细的,结合一些常用的场景和方法,我们一般认为Activity的生命周期和其他方法有如下关系
在这里插入图片描述

二、生命周期具体分析

1.onCreate()

当Activity创建实例完成,并调用attach方法赋值PhoneWindow、ContextImpl等属性之后,调用此方法。该方法在整个Activity生命周期内只会调用一次。调用该方法后Activity进入ON_CREATE状态。

2.onStart()

onStart:当Activity准备进入前台时会调用此方法。调用后Activity会进入ON_START状态。
一般的,我们认为onStart()方法表示Activity进入了可见状态,但更为核心的理解是此时Activity出于返回栈的顶端这个方法一般用于从一个Activity切换回一个Activity或新Activity启动

3.onResume()

onResume:当Activity准备与用户交互的时候调用。调用之后Activity进入ON_RESUME状态。
此时的活动一定位于返回栈的栈顶,并且处于运行状态。

4.onPause()

onPause:当前activity窗口失去焦点的时候,会调用此方法。调用后activity进入ON_PAUSE状态,并进入后台。
我们通常会在这个方法中将一些及其消耗 CPU 的资源释放掉(比如显示地图或者大规模图形),以及保存一些关键数据(比如用户输入的数据等等),但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

5.onStop()

onStop:当activity不可见的时候进行调用。调用后activity进入ON_STOP状态。

6.onRestart()

7.onDestory()

onDestroy:当activity被系统杀死或者调用finish方法之后,会回调该方法。调用该方法之后activity进入ON_DESTROY状态。

三、引起生命周期的回调方法

onActivityResult

结合startActivityForResult一起使用。
具体地结合上面那张图这么分析

onSaveInstanceState/onRestoreInstanceState

这两个方法,主要用于在Activity被意外杀死的情况下进行界面数据存储与恢复。什么叫意外杀死呢?

onNewIntent

四、场景生命周期流程

正常启动

Activity切换

屏幕旋转

当因资源配置改变时,activity会销毁重建,最常见的就是屏幕旋转。这个时候属于异常情况的Activity生命结束。因而,在销毁的时候,会调用onSaveInstanceState来保存数据,在重新创建新的activity的时候,会调用onRestoreInstanceState来恢复数据。

后台应用被系统杀死

这个流程跟上面的资源配置更改是很像的,只是每个activity不可见的时候,会回调onSaveInstanceState提前保存数据,那么在被后台杀死的时候,就不需要再次保存数据了。

具有返回值的启动

五、常见的面试题提问

1、假设项目中有这样的需求,当指定的 Activity 在用户可见后才进行广播的注册,在用户不可见后对广播进行注销,那应该在哪两个回调中做这个处理呢?

注意可见和不可见,所以抓住onStart()onStop()

2.如果有一些数据在 Activity 跳转时(或者离开时)要保存到数据库,那么你认为是在 onPause() 好还是在 onStop() 执行这个操作好呢?

要结合看数据重要性、数据操作耗时性
onPause()的优势在于更易于执行,毕竟可能Activity还没执行到onStop()就被回收
onStop()的优势在于存储的耗时操作不会影响下一个Activity

3.Activity A 启动了 Activity B,简单说下它们分别的生命周期的变化。

4.Activity A 通过 Intent 显示启动了 Activity B,当 B 处于可见状态后,A 是否一定会调用 onStop()?

这两题的常规思路上面的分析已经给出,但是要注意ActivityA不一定调用onStop()方法
比如Activity B是dialog形式的Activity,或者Activity B的不透明度被降低

总结

暂时就整理到这里,后续继续完善

Android全面解析之Activity生命周期
Android 面试:如何理解 Activity 的生命周期

举报

相关推荐

0 条评论