Android基础——Activity生命周期(一)

986 阅读4分钟

Activity生命周期

一、简介

当用户浏览、退出和返回到您的应用时,您应用中的 Activity 实例会在其生命周期的不同状态间转换。Activity 类会提供许多回调,这些回调会让 Activity 知晓某个状态已经更改:系统正在创建、停止或恢复某个 Activity,或者正在销毁该 Activity 所在的进程。

—— Android官方文档《了解Activity生命周期》

Activity作为用户感知最强的四大组件,在App中承担着重要的任务,熟悉掌握Activity的生命周期可以帮助我们理解Activity在不同情况下所处的状态,生命周期的概念在Android中无处不在,Application、Service和Fragment等都有它们自己的生命周期,本篇主要介绍Activity生命周期的基础知识,不涉及过于复杂的参数和行为讲解。

二、核心流程和回调函数

图 2.1 Android生命周期流程图

2.1 onCreate()

onCreate()方法是Activity生命周期中第一个被回调的方法,它的正常运行标志着Activity正在创建,我们可以在它里面进行一些初始化操作,比如初始化控件并设置相关监听事件,初始化ViewModel等,与它成对出现的是onDestory()方法。

2.2 onStart()

onStart()方法标志着Activity已经位于前台并且可见,很多博客/书籍都会以可见来修饰onStart(),我认为这是有一定歧义的,这里的可见并不是可以看见的意思,其实运行到onStart()时用户还无法看到Activity。
那么为什么说onStart()是可见的呢?我认为它代表的真正含义是Activity中所有初始化相关代码已经执行完毕,但还没有显示在前台,无法和用户进行交互。它的可见只是逻辑上的可见,与它成对出现的是onStop()方法。
onStart()方法是一个耗时很短的方法,开发者最好不要在这个生命周期回调中做过多操作,至于具体原因可以看onResume()生命周期的分析。

2.3 onResume()

onResume()方法的执行标志着用户已经可以和Activity进行交互了,这时Activity搭载的布局上的View已经完成了绘制,用户已经可以看到界面了,这里才代表的是视觉上的可见。与它成对出现的是onPause()方法。
看完onResume()的含义相信你也对为什么onStart()中不能做太多操作有了自己的答案。Android系统为了保证用户的使用体验就必须保证界面及时呈现在用户面前,试想一下如果onStart()中做了很多操作导致界面迟迟无法显示给用户,那么这样的APP用户体验一定是不好的。因此Google建议不要在onStart()中做过多操作影响界面的显示。

2.4 onPause()

onPause()代表Activity进入了暂停状态,但是还是对用户是可见的,典型的情况是一个透明主题的Activity(比如各种透明广告),显示在不透明主题的Activity上方,这时被覆盖的底层Activity就进入了onPause(),它们已经无法与用户交互了,但是仍然对用户是可见的。
onPause()中不能进行太耗时的操作,因为它会影响下一个界面的展示。理由同onStart()
处于onPause()状态的Activity进入前台后可以直接进入onResume()状态,也很好理解,反正只是暂停了,资源也没有被回收,回去的时候直接显示就好了。

2.5 onStop()

onStop()标志Activity已经对用户不可见了,比如Activity A启动了不透明的Activity B,此时Activity A就进入了onStop()状态。与onPause()的区别就是处于onPause()状态的Activity用户仍然能够看到,然而处于onStop()状态的Activity用户已经无法看到了。
onStop()中可以进行一些稍微重量级的回收工作,但同样不能太耗时。
处于onStop()状态的应用如果重新被调到前台,也就是重新被唤醒时需要经过onRestart()状态回到onStart()状态重新准备并显示到前台。

2.6 onDestory()

onDestory()表示Activity即将被销毁,它是Activity生命周期的最后一个回调,一般可以做一些简单的资源回收工作。

2.7 onRestart()

只有在Activity从不可见重新变为可见时才会进入这个状态,比如用户点击Home键后重新切换回来等。

三、总结

Activity生命周期是非常重要的概念,能帮助开发者理解Activity的运行时状态,它们都是成对出现的,可以成对记忆。