当前位置: 首页 > 图灵资讯 > 技术篇> 两分钟彻底让你明白Android Activity生命周期(图文)

两分钟彻底让你明白Android Activity生命周期(图文)

来源:图灵教育
时间:2023-06-14 09:46:55

两分钟完全让你明白Androidid Activity生命周期(图文)

  大家好,今天给大家详细讲解一下Android中Activity的生命周期。我之前也讲过这个内容,但是和网上大部分文章一样,基本都是 Android的翻译 API,太笼统了,相信大家看了会有一点帮助,但是还是不能完全理解,所以今天就重新总结一下。.

  首先,看看Android api中提供的Activity生命周期图(如果你不明白,可以看完整篇文章,回头看看这张图,你就会明白):

Activity实际上继承了AplicationContext,我们可以重写以下方法:

public class Activity extends ApplicationContext {         protected void onCreate(Bundle savedInstanceState);         protected void onStart();            protected void onRestart();         protected void onResume();         protected void onPause();          protected void onStop();         protected void onDestroy();     }

  为了方便大家更好的理解,我简单写了一篇演示。不懂Activity周期的朋友可以自己练习,大家可以按照我的步骤来。

  第一步:新建Android工程,我在这里命名ActivityDemoid.

  第二步:修改ActivityDemo.java(我在这里重写了以上七种方法,主要用Log打印),代码如下:

package com.tutor.activitydemo;  import android.app.Activity;  import android.os.Bundle;  import android.util.Log;  public class ActivityDemo extends Activity {      private static final String TAG = "ActivityDemo";      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          Log.e(TAG, "start onCreate~~~");      }      @Override      protected void onStart() {          super.onStart();          Log.e(TAG, "start onStart~~~");      }      @Override      protected void onRestart() {          super.onRestart();          Log.e(TAG, "start onRestart~~~");      }      @Override      protected void onResume() {          super.onResume();          Log.e(TAG, "start onResume~~~");      }      @Override      protected void onPause() {          super.onPause();          Log.e(TAG, "start onPause~~~");      }      @Override      protected void onStop() {          super.onStop();          Log.e(TAG, "start onStop~~~");      }      @Override      protected void onDestroy() {          super.onDestroy();          Log.e(TAG, "start onDestroy~~~");      }  }

第三步:运行上述工程,效果图如下(无特殊):

  核心在Logcat视窗中。如果你不能使用Logcat,你可以看看我的文章 Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e) ,当我们打开应用程序时,我们执行了oncreate()->onStart()->onresume三种方法,看LogCat视窗如下:

  BACK键:

  当我们按下BACK键时,我们的应用程序将结束,此时我们将先后调用onPause()->onStop()->onDestory()三种方法,如下图所示:

  HOME键:

  当我们打开应用程序,比如浏览器时,我正在浏览NBA新闻。当我看到一半的时候,我突然想听这首歌。此时,我们将选择按下HOME键,然后打开音乐应用程序 然而,当我们按HOME时,Activity先后执行了onpause()->onStop()此时应用程序没有销毁这两种方法。如下图所示 所示:

  当我们再次启动ActivityDemo应用程序时,onrestart()分别执行->onStart()->onResume()三种方法,如下图所示:

  在这里,我们将引出一个问题。当我们按下HOME键,然后进入ActivityDemo应用程序时,我们的应用程序状态应该与按下HOME键之前的状态相同。为了便于理解,我在这里修改ActivityDemo代码,即添加Edittext。

  第四步:修改main.xml布局文件(添加edittext),代码如下:

<?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:orientation="vertical"       android:layout_width="fill_parent"       android:layout_height="fill_parent"       >   <TextView         android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello"       />   <EditText       android:id="@+id/editText"       android:layout_width="fill_parent"       android:layout_height="wrap_content"   />   </LinearLayout>

第五步:然后运行ActivityDemo程序,在Edittext中输入其他不变的程序,如“Frankie字符串(如下图所示)

  此时,您可以按下HOME键,然后再次启动ActivityDemo应用程序,此时Edittext中没有我们输入的“Frankie“字样,如下图所示:

  这显然不是一个合格的应用程序,所以我们需要在几种Activity方法中实现它,如下第六步所示:

  第六步是修改ActivityDemo.java代码如下:

package com.tutor.activitydemo;   import android.app.Activity;   import android.os.Bundle;   import android.util.Log;   import android.widget.EditText;   public class ActivityDemo extends Activity {       private static final String TAG = "ActivityDemo";       private EditText mEditText;       //定义String 用于存取我们Edittext输入值的类型       private String mString;       public void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.main);           mEditText = (EditText)findViewById(R.id.editText);           Log.e(TAG, "start onCreate~~~");       }       @Override       protected void onStart() {           super.onStart();           Log.e(TAG, "start onStart~~~");       }       //按HOME键再次启动应用时,我们必须恢复以前的状态       @Override       protected void onRestart() {           super.onRestart();           mEditText.setText(mString);           Log.e(TAG, "start onRestart~~~");       }        @Override       protected void onResume() {           super.onResume();           Log.e(TAG, "start onResume~~~");       }       //当我们按HOME键时,我在onPause方法中,将输入值赋予mstring       @Override       protected void onPause() {           super.onPause();           mString = mEditText.getText().toString();           Log.e(TAG, "start onPause~~~");       }        @Override       protected void onStop() {           super.onStop();           Log.e(TAG, "start onStop~~~");       }              @Override       protected void onDestroy() {           super.onDestroy();           Log.e(TAG, "start onDestroy~~~");       }   }

  第七步:重新运行ActivityDemo程序,重复第五步。当我们按下HOME键再次启动应用程序时,Edittext中有最后一个输入。”Frankie“字样,如下图所示:

  OK,大功基本完成。这个时候可以回去看看Activity的生命周期图。我想你应该完全了解Activity的生命周期。不知道你知不知道。