Android非异常情况下的Activity生命周期分析

作者:小二玩编程 时间:2022-10-29 04:06:12 

Activity非异常情况下的生命周期是指,用户正常参与UI交互的情况下,Activity所经过的生命周期的改变;一般情况下,Activity会经过以下几个生命周期。

1、OnCreate(): 表示Activity正在创建,这个是生命周期的第一个方法,该方法只调用一次,在这个方法中,一般做变量初始化的操作,例如绑定一个Button控件的Id等。

2、onRestart(): 表示Activity正在重新启动,一般情况下,如果最前面的Activity从不可见状态变为可见状态时,onRestart()这个方法都会被调用,一般情况下都是用户操作导致的;例如,当前这个Activity叫A,用户启动了一个新的Activity叫B,这时A就会暂停,也就是onPause()和 onStop()被调用了,接着用户又回到了这个A时,就会出现这种情况。

3、onStart(): 表示Activity正在被启动,将要开始,这时的Activity是可见状态了,但是没有出呈现到前台的,还不能和用户打交道,其实Activity已经显示出来了,只是我们看不到而已

4、onResume(): 表示Activity已经可见了,也就是呈现在前台上,即我们肉眼能够看得见了。我们要留意这个onResume()和onStart()的区别,onStart()和onResume()都表示是Activity的可见状态,但是调用onStart()方法时Activity是在后台,而调用onResume()方法时Activity是在前台的。

5、onPause(): 表示Activity正在停止,这时候Activity的状态是不可见的,但是还是显示在前台的;一般情况下,下一个生命周期的方法onStop()就会被调用。在这里可以做一些存储数据的操作,但不可以过于耗时,因为会影响Activity显示的效果。

6、onStop(): 表示Activity即将停止,这时候Activity的状态是不可见的,也不是显示在前台上了,在这里可以做一些稍微重量级的回收工作,也不可以太耗时。

7、onDestroy(): 表示Activity即将被销毁,这是Activity生命周期的最后一个方法,在这里可以做一些资源的释放。

下面以一张图展示非异常情况下生命周期调用的方法

Android非异常情况下的Activity生命周期分析

好了,前面分析了那么多,我们来写一个小demo看一下效果。
(1)、首先创建第一个Activity,名叫ActivityA,代码如下所示:


var activityName: String? = "ActivityA"
val TAG: String? = "Activity"
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_a)
  Log.d(TAG,activityName + "---------onCreate")
}

override fun onRestart() {
  super.onRestart()
  Log.d(TAG,activityName + "---------onRestart")
}

override fun onStart() {
  super.onStart()
  Log.d(TAG,activityName + "---------onStart")
}

override fun onResume() {
  super.onResume()
  Log.d(TAG,activityName + "---------onResume")
}

override fun onPause() {
  super.onPause()
  Log.d(TAG,activityName + "---------onPause")
}

override fun onStop() {
  super.onStop()
  Log.d(TAG,activityName + "---------onStop")
}

override fun onDestroy() {
  super.onDestroy()
  Log.d(TAG,activityName + "---------onDestroy")
}

public fun onClick(v: View) {
  var clazz = ActivityB:: class.java
  var it: Intent = Intent(this,clazz)
  startActivity(it)
}

对应的ActivityA的activity_a.xml文件如下所示:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:orientation="vertical"
 android:layout_height="match_parent">
 <TextView
   android:layout_width="match_parent"
   android:gravity="center"
   android:text="这是一个Activity,名字叫A"
   android:layout_height="wrap_content" />
 <Button
   android:layout_width="match_parent"
   android:text="点击此按钮,可启动新的Activity"
   android:onClick="onClick"
   android:layout_height="wrap_content" />
</LinearLayout>

(2)、创建另外一个Activity,名叫ActivityB,如下所示:


val TAG: String? = "Activity"
var activityName: String? = "ActivityB"
override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 setContentView(R.layout.activity_b)
 Log.d(TAG,activityName + "---------onCreate")
}

override fun onRestart() {
 super.onRestart()
 Log.d(TAG,activityName + "---------onRestart")
}

override fun onStart() {
 super.onStart()
 Log.d(TAG,activityName + "---------onStart")
}

override fun onResume() {
 super.onResume()
 Log.d(TAG,activityName + "---------onResume")
}

override fun onPause() {
 super.onPause()
 Log.d(TAG,activityName + "---------onPause")
}

override fun onStop() {
 super.onStop()
 Log.d(TAG,activityName + "---------onStop")
}

override fun onDestroy() {
 super.onDestroy()
 Log.d(TAG,activityName + "---------onDestroy")
}

ActivityB对应的activity_b.xml的文件如下所示~~


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
  android:layout_width="match_parent"
  android:text="这是一个Activity,名字叫B"
  android:gravity="center"
  android:layout_height="wrap_content" />
</LinearLayout>

第一次运行的结果如下所示~~~~

Android非异常情况下的Activity生命周期分析

以下是相应的日志打印


01-08 11:48:39.068 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onCreate
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 11:48:39.069 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume

点击“点击此按钮,可启动新的Activity”按钮,效果图如下所示

Android非异常情况下的Activity生命周期分析

相应的日志如下所示:


01-08 11:57:44.455 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onPause
01-08 11:57:44.465 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onCreate
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStart
01-08 11:57:44.466 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onResume
01-08 11:57:44.843 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStop

点击返回键,返回ActivityA,日志如下所示:


01-08 12:22:40.318 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onPause
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onRestart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onStart
01-08 12:22:40.319 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityA---------onResume
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onStop
01-08 12:22:41.125 3021-3021/activitylifecycle.xe.com.activitylifecycle D/Activity: ActivityB---------onDestroy

由于技术水平有限,文章中难免会有错误,欢迎大家批评指正,另外附上小demoActivity生命周期的方法调用过程,谢谢大家的阅读。~~~~

来源:https://segmentfault.com/a/1190000038901842

标签:Android,Activity,生命周期
0
投稿

猜你喜欢

  • springboot如何配置定时任务

    2021-06-22 09:16:12
  • Java类加载初始化的过程及顺序

    2021-12-09 16:12:46
  • Java设计模式之动态代理模式实例分析

    2022-07-07 17:55:07
  • 浅析Android TextView常用属性

    2022-12-20 00:32:18
  • springboot整合solr的方法详解

    2023-01-20 17:54:37
  • Java实现TFIDF算法代码分享

    2023-12-23 20:54:45
  • Java BigDecimal除法精度和格式化输出方式

    2023-01-06 01:03:42
  • Java线程池 ThreadPoolExecutor 详解

    2021-05-24 10:35:42
  • Java读取并下载网络文件的方法

    2023-03-18 11:47:05
  • SpringDataRedis入门和序列化方式解决内存占用问题小结

    2022-01-28 18:51:53
  • C#显示文件夹下所有图片文件的方法

    2021-11-25 23:50:10
  • Java中synchronized锁的深入理解

    2023-08-18 01:36:55
  • JAVA心得分享---return语句的用法

    2023-04-14 11:52:54
  • Android保持屏幕常亮唤醒状态的方法

    2021-05-30 15:15:29
  • Java C++分别实现滑动窗口的最大值

    2023-04-12 02:59:21
  • mall整合SpringSecurity及JWT实现认证授权实战

    2022-10-04 03:16:33
  • java中this与super关键字的使用方法

    2022-05-04 22:03:29
  • 浅谈Maven镜像更换为阿里云中央仓库(精)

    2022-08-06 04:48:17
  • Cocos2d-x入门教程(详细的实例和讲解)

    2023-07-31 17:18:00
  • Flutter Widgets之标签类控件Chip详解

    2023-06-26 14:22:35
  • asp之家 软件编程 m.aspxhome.com