• Activity的生命周期


    一、Activity的基本概念

      Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。

    二、Activity的生命周期

      Activity生命周期是每一个Android开发者都必须掌握的,当我们深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序,让我们的程序拥有更好的用户体验

     2.1、Activity的生命周期图

      先上一张从图吧,图片看上去一目了然。图片来源(http://www.runoob.com/w3cnote/android-tutorial-activity.html)

      

    2.2、Activity的四种状态

      每个Activity在其生命周期中最多可能会有四种状态。

    1.运行状态

      当一个Activity位于返回栈(关于返回栈的概念下面再介绍)的栈顶时,这时Activity就处于运行状态,系统会将处于栈顶的Activity显示给用户。

    2.暂停状态

      当一个Activity不再处于栈顶位置,但仍然可见,这时Activity就进入了暂停状态。初学者可能会有这样的疑问,既然Activity都已经不在栈顶了,怎么会还可见呢,这是因为并不是每一个Activity都会占满整个屏幕的,比如对话框形式的Activity只会占用屏幕中间的部分区域。

    3.停止状态

       当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。

    4.销毁状态

      当一个Activity从返回栈中移除后就变成了销毁状态。

    2.3、Android返回栈

      Android是使用任务(Task)来管理Activity的,一个任务就是一组存放在栈里的Activity集合,这个栈被称作返回栈,栈(堆栈)是一种先进后出的数据结构,这里顺便提一下另一种常见的数据结构:队列,队列是一种先进先出的数据结构。

      每当启动一个新的Activity时,它会被放入返回栈中,并处于栈顶的位置。每当我们按下Back键或调用activity的finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。

     2.4、Activity的生存期

      Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节,下面来一一介绍这7个方法

    1.onCreate()

      这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。

    2.onStart()

      这个方法在Activity由不可见变为可见时调用。

    3.onResume()

      这个方法在Activity准备好喝用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。

    4.onPause()

      这个方法在系统准备去启动或者恢复另一个Activity的时候调用。

    5.onStop()

      这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。

    6.onDestory()

      这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。

    7.onRestart()

      这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

    三、体验Activity的生命周期

      前面介绍了关于Activity的点点滴滴,下面我们来亲自实战一下,新建一个LifecycleActivity,用于演示LifecycleActivity的生命周期,代码如下:

    复制代码
      1 package com.nyl.activitysummary;
      2 
      3 import android.app.Activity;
      4 import android.content.Intent;
      5 import android.os.Bundle;
      6 import android.util.Log;
      7 import android.view.View;
      8 import android.view.Window;
      9 import android.widget.Button;
     10 
     11 /**
     12  * Activity生命周期演示
     13  */
     14 public class LifecycleActivity extends Activity implements View.OnClickListener {
     15 
     16     private static final String TAG = LifecycleActivity.class.getSimpleName();
     17 
     18     private Button btnNormal;
     19     private Button btnDialog;
     20 
     21     /**
     22      * activity第一次创建时被调用
     23      * @param savedInstanceState
     24      */
     25     @Override
     26     protected void onCreate(Bundle savedInstanceState) {
     27         super.onCreate(savedInstanceState);
     28         Log.d(TAG,"onCreate()→android系统调用onCreate方法第一次创建LifecycleActivity,LifecycleActivity此时处于【运行状态】");
     29         //去掉标题
     30         requestWindowFeature(Window.FEATURE_NO_TITLE);
     31         //加载布局
     32         setContentView(R.layout.activity_lifecycle);
     33         //初始化控件
     34         initView();
     35     }
     36 
     37     /**
     38      * 初始化视图
     39      */
     40     private void initView() {
     41         btnNormal = (Button) findViewById(R.id.btnNormal);
     42         btnDialog = (Button) findViewById(R.id.btnDialog);
     43 
     44         btnNormal.setOnClickListener(this);
     45         btnDialog.setOnClickListener(this);
     46     }
     47 
     48     @Override
     49     public void onClick(View view) {
     50         switch (view.getId()){
     51             case R.id.btnNormal:
     52                 Intent intent = new Intent(LifecycleActivity.this,NormalActivity.class);
     53                 startActivity(intent);
     54                 break;
     55             case R.id.btnDialog:
     56                 Intent intent1 = new Intent(LifecycleActivity.this,DialogActivity.class);
     57                 startActivity(intent1);
     58                 break;
     59         }
     60     }
     61 
     62     /**
     63      * activity从后台重新回到前台(由不可见变为可见)时被调用
     64      */
     65     @Override
     66     protected void onStart() {
     67         super.onStart();
     68         Log.d(TAG,"onStart()→LifecycleActivity从后台重新回到前台(由不可见变为可见),android系统调用了onStart方法,LifecycleActivity此时处于【运行状态】");
     69     }
     70 
     71     /**
     72      * Activity准备好和用户进行交互的时候被调用
     73      */
     74     @Override
     75     protected void onResume() {
     76         super.onResume();
     77         Log.d(TAG,"onResume()→LifecycleActivity准备好和用户进行交互的,android系统调用了onResume方法,LifecycleActivity此时处于【运行状态】");
     78     }
     79 
     80     /**
     81      * Activity准备去启动或者恢复另一个Activity的时候调用
     82      */
     83     @Override
     84     protected void onPause() {
     85         super.onPause();
     86         Log.d(TAG,"onPause()→LifecycleActivity准备去启动另一个Activity,android系统调用了onPause方法,LifecycleActivity此时处于【暂停状态】");
     87     }
     88 
     89     /**
     90      * 退出当前Activity或者跳转到新Activity时被调用
     91      * Activity完全不可见的时候调用
     92      */
     93     @Override
     94     protected void onStop() {
     95         super.onStop();
     96         Log.d(TAG,"onStop()→LifecycleActivity已经完全不可见了,android系统调用了onStop方法,LifecycleActivity此时处于【停止状态】");
     97     }
     98 
     99     /**
    100      * 退出当前Activity时被调用,调用之后Activity就结束了
    101      */
    102     @Override
    103     protected void onDestroy() {
    104         super.onDestroy();
    105         Log.e(TAG,"onDestroy()→LifecycleActivity已经准备被销毁了,android系统调用了onDestroy方法,LifecycleActivity此时处于【销毁状态】");
    106     }
    107 
    108     /**
    109      * Activity从后台重新回到前台时被调用
    110      */
    111     @Override
    112     protected void onRestart() {
    113         super.onRestart();
    114         Log.e(TAG,"onRestart()→LifecycleActivity由【停止状态】变为【运行状态】,android系统调用了onRestart方法,LifecycleActivity此时处于【运行状态】");
    115     }
    116 }
    复制代码

      为了演示生命周期,我们还需要分别再创建两个子Activity,分别为NormalActivity和DialogActivity,代码如下:

    复制代码
     1 package com.nyl.activitysummary;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.Window;
     6 
     7 /**
     8  * 正常显示的Activity
     9  */
    10 public class NormalActivity extends Activity {
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         requestWindowFeature(Window.FEATURE_NO_TITLE);
    16         setContentView(R.layout.activity_normal);
    17     }
    18 }
    复制代码
    复制代码
     1 package com.nyl.activitysummary;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.Window;
     6 
     7 /**
     8  * 以Dialog的形式展示的Activity
     9  */
    10 public class DialogActivity extends Activity {
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         requestWindowFeature(Window.FEATURE_NO_TITLE);
    16         setContentView(R.layout.activity_dialog);
    17     }
    18 }
    复制代码

      在LifecycleActivity的onCreate方法中,分别注册了两个按钮的点击事件,点击第一个按钮会启动NormalActivity,点击第二个按钮会启动DialogActivity,然后我们在LifecycleActivity的7个回调方法中通过Log打印一句话,这样就可以通过观察日志的方式来清楚地看到LifecycleActivity的生命周期

    LifecycleActivity的生命周期控制台打印日志效果如下:

      关于Activity的基本概念与Activity的生命周期的总结内容就写这么多。

    转自:https://www.cnblogs.com/nylcy/p/6500832.html

  • 相关阅读:
    【像程序员一样思考】读书笔记4
    MFC ListControl 与 Excel 数据的导入导出
    OpenCV中findContours函数的使用
    十大算法
    qsort对二维数组的排序
    【像程序员一样思考】读书笔记3
    【像程序员一样思考】 读书笔记2
    【像程序员一样思考】 读书笔记1
    代码混淆
    布局优化
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00118.html
Copyright © 2020-2023  润新知