??【Android精进之路-04】Android核心组件Activity(Activity的生命周期是怎样的)??
**您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。@[TOC]
本文会介绍Android中的核心组件Activity,重点介绍其生命周期**
Android系列文章都在Android专栏中,欢迎小伙伴关注。
往期回顾 ??【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重建。
文章图片
图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重新进入运行状态。
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()方法或者系统决定停止该活动并释放资源 |
全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的快乐
我是码农飞哥,再次感谢您读完本文。
推荐阅读
- 宽容谁
- 我要做大厨
- android第三方框架(五)ButterKnife
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 赢在人生六项精进二阶Day3复盘