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

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生命周期的最后一个方法,在这里可以做一些资源的释放。

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

好了,前面分析了那么多,我们来写一个小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>

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

以下是相应的日志打印

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”按钮,效果图如下所示

相应的日志如下所示:

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生命周期的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android Activity 横竖屏切换的生命周期

    前言 在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函数如下 onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据 onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据 横竖屏切换生命周期 1.启动程

  • Android Activity生命周期详解

    Activity 的生命周期. 一.理解Activity Activity是Android程序的4大组件之一. Activity是Android程序的表示层.程序的每一个显示屏幕就是一个Activity. 学过WEB开发的同学,可以把Activity理解成网页中的一个JSP文件:或者你可以把它理解成一个Windows的窗口. 下面看一下Activity类的继承关系: 从这里可以看到Activity是Context类的子类,大家对此先有个印象.  二.理解Activity的生命周期 手机最重要也是

  • android基础总结篇之一:Activity生命周期

    近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activi

  • Android开发中Activity的生命周期及加载模式详解

    本文给大家介绍Activity的生命周期,如果大家学习过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周期莫过于生老病死,花儿的生命周期就是花开花谢了.在Android中Activity的生命周期莫过于Activity的创建到消亡的过程了.本篇博客就会介绍Activity生命周期中的不同阶段,通过实例的形式来窥探一下Activity的生命周期.搞明白Activity的生命周期是至关重要的,因为只有搞明白每

  • Android Activity生命周期和堆栈管理的详解

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用户也不能实例化,是系统进行回调,例如web开发的servlet也是系统提供的,和android 的其他系统组件一样. 那么不需要我们实例化我们怎么用呢,这些组件都有相同的特点就是: 1.都需要在配置文件中注册 2.都需要自定义类去继承系统的Api 3.都有自己的生命周期 那么Activity的生命周

  • android中Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)

    一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifestxml中指定一个主的Activity,如下设置 <actionandroid:name="AndroidintentactionMAIN" /> 当程序第一次运行时用户就会看这个Activity,这个Activity可以通过启动其他的Activity进行相关操作.当启动其他的Activity时这个当前的

  • Android开发系列二之窗口Activity的生命周期

    在上篇文章给大家介绍了android开发系列一之用按钮实现显示时间,感兴趣的朋友可以点击阅读详情. 在Activity从创建到销毁的过程中需要在不同的阶段调用7个生命周期的方法这7个生命周期方法定义如下: protected void onCreate(Bundle savedInstanceState) protected void onStart() protected void onResume() protected void onPause() protected void onSto

  • Android Activity的生命周期详细介绍

    Android Activity的生命周期详细介绍 生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法.在这个过程中,会针对不同的生命阶段调用不同的的方法. Activity是Android中四大组件之一,是最常见的应用组件,也是用的最多的组件,它能够提供一个界面与用户进行交互.Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:onCreate  onDestory  onStart  onStop  onRes

  • Android中Activity生命周期和启动模式详解

    Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法. 再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,A

  • Android开发之activity的生命周期详解

    本文实例讲述了Android activity的生命周期.分享给大家供大家参考,具体如下: activity类处于android.app包中,继承体系如下: 1.Java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activity activity是单独的,用于处理用户操作.几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,开发人员可以通

  • Android中Fragment与Activity的生命周期对比

    Fragment必须是依存于Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期.官网这张图很好的说明了俩者的关系: 可以看到Fragment比Activity多了几个额外的生命周期回调函数: onAttach(Activity); //当Activity与Fragment发生关联时调用 onCreateView(LayoutInflater,ViewGroup,Bundle); //创建该Fragment的视图 onActivityCreate(bun

随机推荐