Activity的生命周期

时间:2021-07-24 03:57:54

Android开发一年多了,突然发现自己的知识点是比较碎的,然后急需梳理自己的Android知识,然后去看了Android的中文官方文档,然后在此做一下笔记,来记录一下。

Activity的生命周期

Activity的生命周期

这是官方给的Activity的生命周期(官方文档把这个过程称为金子塔 - - 启动过程是爬金字塔,退出过程是下金字塔),生命周期有七个,包括onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()、onRestart()。对应着6个状态,包括created、started(visible)、Resumed(visible)、Paused(partially visible)、Stopped(hidden)、Destroyed。

1. onCreate

Activity启动时执行,并且在当前Activity的整个生命周期中只活动一次。在方法onCreate中有一个参数savedInstanceState(注意,该参数是Bundle 类型的,用来存储数据的),这个参数记录保留了上次该activity不正常销毁时的状态(如:横竖屏转换)。

2. onstart

每次当您的活动变得可见时,系统还会调用onStart()方法(无论是重新启动还是第一次创建) 。在onStart()方法中实例化资源,所以通常会配对地使用onStart()方法和onStop()方法

3. onResume

当系统调用该方法,进入Resumed状态,Activity就会进入前台,可见。在该方法中初 始化一些资源,并在onPause中释放。像执行一些动画、初始化相机都在该方法中执行。

4. onPause

系统执行该方法时,该Activity部分可见。但是用户已经要离开这个Activity了,并且会 很快进入stoped状态。执行onPause后,activity还存在于内存之中,当activity回复的 时候,就不需要执行onCreate进行初始化了。

当遇到下面情况时,在该方法中操作:

  • 停止动画或其他正在运行的占用内存的活动

  • 释放系统资源,像广播、处理传感器、一些在onPaused状态时,不需要但又耗电的资源

  • 如果用户离开Activity时,期望保存一些修改,那么在该方法中提交修改(一般不会在onPause中保存数据,除非用户希望保存。例如:在表格中写入个人信息就不在该方法中保存,像电子邮箱的草稿保存,就可以在该方法中保存,因为用户希望保存)

5. onStop

当系统调用它的时候,activity已不可见,应该释放所有几乎不需要的资源。当activity进入Stopped状态的时候,如果系统需要恢复系统内存,系统可能会销毁该activity的实例。在极端情况下,如果你在onStop中释放资源,系统可能只是杀掉了你的应用程序的过程而并不调用活动最终的OnDestroy()回调方法,造成内存泄漏。
虽然onPause()方法在onStop()之前调用 ,你应该使用onStop()执行大量的更密集的CPU关闭操作,比如将信息写入到数据库。
当进入Stopped状态后,activity对象是驻留在内存中。当activity恢复时不用再重新初始化。即使系统在你的activity停止时销毁了它,系统仍然在一个Bundle(键-值对集合)中保留视图对象的状态,并在用户导航回到同一个activity实例时恢复它们。

6. onRestart

当你的活动从停止状态回到前台,它会接收到 onRestart()方法的调用。只有在活动从停止状态恢复时被调用,所以你可以用它来​​执行一些特殊的恢复工作,那些可能只有当活动之前是停止而不是被销毁时才必需的恢复。

7. onDestroy
当该方法调用时,该activity的实例就会从内存中移除。在代码中运行finish()时,直接调用onDestroy。例如:在onCreate中加入finish(),在执行完onCreate之后,其他的生命周期就不会调用,直接执行OnDestroy方法。
通常你的大部分资源已经在onStop()方法中释放了,当接收到onDestroy()调用的时候,大多数应用程序没有太多的东西需要做了。这个方法是你清理可能会导致内存泄漏的资源的最后机会,所以你应该确保额外的线程被销毁,其他长期运行的操作(如方法跟踪)要停止。

对于6个状态,这里重点说三个,因为其他状态都非常的短暂,一闪而过。这三个状态如下:

1. Resumed

在这种状态下,活动在前台,用户可以与它交互。可见。(有时也称为“运行状态”)。

2. Paused

在这种状态下,活动被另一活动部分遮挡,前景中的其他活动是半透明的或不覆盖整个屏幕。暂停的活动不接收用户输入,不能执行任何代码。可见,但不能与用户交互。

3. Stopped

在这种状态下,该活动是完全隐藏的,对用户不可见;它被认为是背景。停止时,活动实例及其所有状态信息(如成员变量)被保留,但它不能执行任何代码。