** 您好,我是码农飞哥,感谢您浏览本文,欢送一键三连哦。
本文会介绍 Android 中的外围组件 Activity, 重点介绍其生命周期 **
Android 系列文章都在 Android 专栏中,欢送小伙伴关注。
@[TOC]
往期回顾
❤️【Android 精进之路 -01】定打算,重口头来学 Android 吧❤️
❤️【Android 精进之路 -02】装置 Android Studio,意识 Android SDK, 一步步学习❤️
❤️【Android 精进之路 -03】创立第一个 Android 应用程序居然如此简略❤️
Activity 组件是什么
Activity 组件是 Android 的用户接口程序,它充当了 Android 应用程序与用户的交互入口。能够将它比喻成 Android 管理员:须要在屏幕显示什么,解决用户的不同操作都须要由 Activity 来协调治理。比方用户须要打电话,拍照等操作都能够通过 Activity 提供的交互接口来实现。
每个 Activity 都提供了用户界面窗口(即屏幕)。个别状况下,该界面窗口会填满整个屏幕,然而也能够比屏幕小或者浮在其余窗口之上。
一个 Android 应用程序通常蕴含多个屏幕,即意味着有多个 Activity,然而只能有一个 Activity 作为应用程序的主 Activity。这个主 Activity 就相当于 Java 应用程序中的 main 函数,是 Android 应用程序启动后用户看到的第一个屏幕。
Android 应用程序中的多个 Activity 能够间接互相调用以实现不同工作。例如:
一个电子邮件的应用程序中主 Activity 提供了显示电子邮件收件箱的屏幕,能够从主 Activity 启动其余 Activity 用于执行写邮件和关上邮件这类工作。
Activity 的生命周期
一个 Activity 从被 创立 —> 启动 –> 暂停 –> 销毁 是一个残缺的生命周期。当新的 Activity 被启动的时候,之前的 Activity 就会进行,然而不会立马被销毁,而是被压入到 ” 后退栈(Back Stack)” 的栈顶。这里的后退栈遵循 ” 后进先出 ” 的准则,当新启动的 Activity 被应用结束,用户单击 ”Back” 按钮时,以后的 Activity 会被销毁,而原先的 Activity 会被从 ” 后退栈 ” 中弹出并被激活。
Activity 实质上有三种状态:
- 运行状态:Activity 运行于屏幕的最上层并且取得了用户焦点
- 暂停状态:Activity 仍然存在,然而没有取得用户焦点。以后的 Activity 没有被运行态的 Activity 遮挡住,用户是能够看到其用户界面的。
- 进行状态:以后的 Activity 齐全被处于运行态的 Activity 遮挡住,其用户界面齐全不被用户看见。如果 Activity 来到可见阶段,长时间失去焦点,就很可能会被零碎销毁以开释资源。当然,即便该 Activity 被销毁掉,用户对该 Activity 所做的更改也会被保留在 Bundle 对象中,当用户须要从新显示该 Activity 时,Android 零碎会依据之前保留的状态信息将该 Activity 重建。
当 Activity 状态产生扭转时,都会通过状态回调函数来告诉 Android 零碎,开发人员能够通过这些回调函数对 Activity 进行进一步的管制。这些状态回调函数由 android.app.Activity 类提供。所有的 Activity 都必须要继承 android.app.Activity 类或者它的子类。Activity 的生命周期如图 1 所示:
图 1 是 Android 官网开发文档上提供的图,这里我翻译了一下,提供了一个汉化版的图供有须要的同学查看。
图 1 和图 2 具体的展现了 Activity 的生命周期。其次要有如下几个流程:
- 当 Activity 启动时:会调用 onCreate(),onStart(),onResume() 三个办法,使 Activity 处于运行状态,即在屏幕显示并取得用户焦点。
- 当用户切换到其余 Activity 时:该 Activity 会进入暂停状态,会调用 onPause()办法,当用户返回该 Activity 时会从新调用 onResume()办法激活该 Activity。
- 当用户敞开该利用,切换到其余应用程序是会调用 onStop(),onDestory() 办法,销毁该 Activity。
- 当该 Activity 长时间不显示的话则调用 onStop()办法进入进行状态,用户从新浏览该 Activity 时会调用 onRestart(),onStart(),onResume() 三个办法,Activity 从新进入运行状态。
上面就用代码演示一下:这里创立了一个名为 MainActivity 的简略 Activity。在每个回调办法中都打印了XXX 执行了,通过演示让大家对 Activity 的生命周期有一个更清晰的印象。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate 执行了");
}
@Override
protected void onStart() {super.onStart();
Log.i(TAG, "onStart 执行了");
}
@Override
protected void onResume() {super.onResume();
Log.i(TAG, "onResume 执行了");
}
@Override
protected void onPause() {super.onPause();
Log.i(TAG, "onPause 执行了");
}
@Override
protected void onDestroy() {super.onDestroy();
Log.i(TAG, "onDestroy 执行了");
}
@Override
protected void onStop() {super.onStop();
Log.i(TAG, "onStop 执行了");
}
}
我的项目启动之后的演示成果如下:
[video(video-ugN8SbXU-1632356560660)(type-bilibili)(url-https://player.bilibili.com/p…)(image-https://ss.csdn.net/p?http://…)(title-Android 的 Activity 生命周期的演示)]
这里介绍一下每个回调函数:
名称 | 调用工夫 |
---|---|
onCreate(Bundle savedInstanceState) | 创立 Activity 时调用,该办法通过参数 savedInstanceState 保留 Activity 的对象的状态 |
onStart() | Activity 变为在屏幕上对用户可见时调用 |
onResume() | Activity 开始与用户交互时调用(无论是启动还是重启一个流动,该办法总是被调用) |
onPause() | 当用户切换到其余 Activity 时调用,该 Activity 会暂停,让出 CPU 的调用 |
onStop() | 当该 Activity 长时间不显示时调用 |
onRestart() | 重启启动曾经进行的 Activity 时调用 |
onDestroy() | Activity 被齐全从零碎内存中移除时调用,该办法被调用可能是因为间接调用了 finish()办法或者零碎决定进行该流动并开释资源 |
总结
本文具体介绍了 Activity 的生命周期,须要明确的是 Activity 是 Android 应用程序与用户交互的入口,是用户与 Android 应用程序交互的中枢。它有残缺的生命周期。
全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的高兴
我是码农飞哥,再次感谢您读完本文。