欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-03-29 10:20:01
activity非异常情况下的生命周期是指,用户正常参与ui交互的情况下,activity所经过的生命周期的改变;一般情况下,activity会经过以下几个生命周期。1、oncreate(): 表示a...

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生命周期的方法调用过程,谢谢大家的阅读。~~~~

以上就是android非异常情况下的activity生命周期分析的详细内容,更多关于android activity生命周期的资料请关注其它相关文章!