Activity 简介

Activity类是Android应用的关键组件,而Activity的启动和组合方式则是该平台应用模型的基本组成部分。它是一种可以包含用户界面的组件

Android Activity 生命周期的状态和事件流程图如下:

android activity view真正显示回调 activity的回调函数有哪些_生命周期

Acvitity 生命周期的7个回调函数

一个Activity在其生命周期中会经历多种状态,您可以使用如下7个回调来处理状态之间的转换。具体说明如下:

  • onCreate()
    回调必须实现,它会在系统第一次创建您的Activity时触发。应该在此方法中完成Activity的初始化操作,比如加载布局、绑定事件。
    onCreate()完成后,下一个回调是onStart()
  • onStart()
    onCreate()退出后,Acvitity将进入“已启动”状态,并对用户可见。此回调包含Activity进入前台与用户进行互动之前的最后准备工作
  • onResume
    系统会在Activity开始与用户互动之前调用此回调。此时,该Activity位于Activity堆栈的顶部,并且处于活动状态,并会捕获所有用户输入。**应用的大部分核心功能都是在onResume()**方法中实现。onResume()与onPause()是相对应的
  • onPause
    当Activity失去焦点并进入“Paused”状态时,系统就会调用onPause()。例如,当用户点击【Back】或者【最近使用的应用】按钮时,就会出现此状态。当系统为您的Activity调用onPause()时,从技术上来说,这意味着您的Activity仍然部分可见,但大多数情况下,这表明用户正在离开该Activity。该Activity很快将进入“Stopped”或者“Resumed”状态
    如果用户希望界面继续更新,则处于“Stopped”状态的Activity也可以继续更新界面。
    注意:不应使用onPause来保存应用或者用户数据、进行网络呼叫或者执行数据库事务。
    onPause()执行完毕后,下一个回调为onStop()或者onResume(),具体取决于Activity进入“已暂停”状态后发生的情况
  • onStop
    当Activity 对用户不再可见时,系统会调用onStop()。出现这种情况的原因可能是Activity被销毁,新的Activity启动,或者现有的Activity正在进入“已恢复”状态并覆盖了已停止的Actiivty。在所有这些情况下,停止的Activity都将完全不再可见。
    系统调用的下一个回调将是onRestart()(如果Activity重新与用户互动)或者onDestory()(如果Activity彻底终止)。
  • onRestart()
    当处于“已停止”状态的Activity即将重启时,系统就会调用此回调。onRestart()就会从Activity停止时的状态恢复Activity。此回调的后面总是跟着onStart()。
  • onDestroy()
    系统会在销毁Activity之前调用此回调。此回调是Activity接收的最后一个回调。通常,实现onDestroy是为了确保销毁Activity或者包含该进程时释放该Activity的所有资源
    以上7个方法除了onRestart()方法,其他都是两两相对的,从而可以将Activity分为三个生命周期
  • 完整生存期。Activity在onCreate()和onDestroy()方法经历的生存期,一般情况下,Activity会在onCreate()方法中完成各种初始化操作,onDestroy()方法中完成释放内存的操作
  • 可见生存期。Activity在onStart()方法和onStop()方法之间所经历的就是可见生存期。Activity对于用户总是可见的,即便有可能无法和用户进行交互
  • 前台生存期。Activity在onResume()方法和onPause()方法经历的生存期,Activity总是处于运行状态,此时的Activity是可以和用户进行交互的。

实战

通过建立两个Activity,且将两个Activity的所有生命周期回调都加上打印。执行如下步骤后,验证生命周期的变化,具体如下。

  1. 从桌面启动应用主Activity 的生命周期变化
  2. Activity A中Activity B 再通过Back 返回ActivityA 两者生命周期变化
  3. 在当前页面点击【后台任务】按钮
  4. 在当前页面点击【Home】按钮
// 启动ActivityA
 I/Activity_A: A-------onCreate
 I/Activity_A: A-------onStart
 I/Activity_A: A-------onResume

// 打开ActivityB
 I/Activity_A: A-------onPause
 I/Activity_B: B-------onCreate
 I/Activity_B: B-------onStart
 I/Activity_B: B-------onResume
 I/Activity_A: A-------onStop

// 此时位于ActivityB 通过Back回到ActivityA,ActivityB被销毁
 I/Activity_B: B-------onPause
 I/Activity_A: A-------onRestart
 I/Activity_A: A-------onStart
 I/Activity_A: A-------onResume
 I/Activity_B: B-------onStop
 I/Activity_B: B-------onDestroy
 
// 此时位于ActivityA 点击【后台进程】按钮 再点击测试应用回到当前Activity
 I/Activity_A: A-------onPause
 I/Activity_A: A-------onStop
 I/Activity_A: A-------onRestart
 I/Activity_A: A-------onStart
 I/Activity_A: A-------onResume

// 此时位于ActivityA 点击键Home, 再点击桌面测试应用图标
 I/Activity_A: A-------onPause
 I/Activity_A: A-------onStop
 I/Activity_A: A-------onRestart
 I/Activity_A: A-------onStart
 I/Activity_A: A-------onResume

// 此时位于ActivityA,再点击返回Back,则ActivityA被完全销毁,再次启动会重新执行onCreate流程
 I/Activity_A: A-------onPause
 I/Activity_A: A-------onStop
 I/Activity_A: A-------onDestroy