【android基础】图文并茂讲解activity的生命周期

大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的帮助 ,但是还不能完全吃透,所以我今天特意在重新总结一下.

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的):

 

Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:

[java] view plaincopyprint?

  1. public class Activity extends ApplicationContext {  
  2.        protected void onCreate(Bundle savedInstanceState);  
  3.          
  4.        protected void onStart();     
  5.          
  6.        protected void onRestart();  
  7.          
  8.        protected void onResume();  
  9.          
  10.        protected void onPause();  
  11.          
  12.        protected void onStop();  
  13.          
  14.        protected void onDestroy();  
  15.    }  

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();
}

 

为了便于大家更好的理解,我简单的写了一个Demo,不明白Activity周期的朋友们,可以亲手实践一下,大家按照我的步骤来。

第一步:新建一个Android工程,我这里命名为ActivityDemo.

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

[java] view plaincopyprint?

  1. package com.tutor.activitydemo;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.util.Log;  
  5. public class ActivityDemo extends Activity {  
  6.      
  7.     private static final String TAG = "ActivityDemo";  
  8.       
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.           
  13.         Log.e(TAG, "start onCreate~~~");  
  14.     }  
  15.       
  16.     @Override  
  17.     protected void onStart() {  
  18.         super.onStart();  
  19.         Log.e(TAG, "start onStart~~~");  
  20.     }  
  21.       
  22.     @Override  
  23.     protected void onRestart() {  
  24.         super.onRestart();  
  25.         Log.e(TAG, "start onRestart~~~");  
  26.     }  
  27.       
  28.     @Override  
  29.     protected void onResume() {  
  30.         super.onResume();  
  31.         Log.e(TAG, "start onResume~~~");  
  32.     }  
  33.       
  34.     @Override  
  35.     protected void onPause() {  
  36.         super.onPause();  
  37.         Log.e(TAG, "start onPause~~~");  
  38.     }  
  39.       
  40.     @Override  
  41.     protected void onStop() {  
  42.         super.onStop();  
  43.         Log.e(TAG, "start onStop~~~");  
  44.     }  
  45.       
  46.     @Override  
  47.     protected void onDestroy() {  
  48.         super.onDestroy();  
  49.         Log.e(TAG, "start onDestroy~~~");  
  50.     }  
  51.       
  52. }  

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),代码如下:

[java] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/hello"  
  11.     />  
  12. <EditText  
  13.     android:id="@+id/editText"  
  14.     android:layout_width="fill_parent"  
  15.     android:layout_height="wrap_content"  
  16. />  
  17. </LinearLayout>  

<?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代码如下:

[java] view plaincopyprint?

  1. package com.tutor.activitydemo;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.util.Log;  
  5. import android.widget.EditText;  
  6. public class ActivityDemo extends Activity {  
  7.      
  8.     private static final String TAG = "ActivityDemo";  
  9.     private EditText mEditText;  
  10.     //定义一个String 类型用来存取我们EditText输入的值
      
  11.     private String mString;  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         mEditText = (EditText)findViewById(R.id.editText);  
  16.         Log.e(TAG, "start onCreate~~~");  
  17.     }  
  18.       
  19.     @Override  
  20.     protected void onStart() {  
  21.         super.onStart();  
  22.         Log.e(TAG, "start onStart~~~");  
  23.     }  
  24.     //当按HOME键时,然后再次启动应用时,我们要恢复先前状态
      
  25.     @Override  
  26.     protected void onRestart() {  
  27.         super.onRestart();  
  28.         mEditText.setText(mString);  
  29.         Log.e(TAG, "start onRestart~~~");  
  30.     }  
  31.       
  32.     @Override  
  33.     protected void onResume() {  
  34.         super.onResume();  
  35.         Log.e(TAG, "start onResume~~~");  
  36.     }  
  37.       
  38.     //当我们按HOME键时,我在onPause方法里,将输入的值赋给mString
      
  39.     @Override  
  40.     protected void onPause() {  
  41.         super.onPause();  
  42.         mString = mEditText.getText().toString();  
  43.         Log.e(TAG, "start onPause~~~");  
  44.     }  
  45.       
  46.     @Override  
  47.     protected void onStop() {  
  48.         super.onStop();  
  49.         Log.e(TAG, "start onStop~~~");  
  50.     }  
  51.       
  52.     @Override  
  53.     protected void onDestroy() {  
  54.         super.onDestroy();  
  55.         Log.e(TAG, "start onDestroy~~~");  
  56.     }  
  57.       
  58. }  

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的生命周期了,不知道你了解了没?

原文转自:http://blog.csdn.net/android_tutor/article/details/5772285

 

时间: 2024-07-30 17:36:08

【android基础】图文并茂讲解activity的生命周期的相关文章

Android四大组件之——Activity的生命周期(图文详解)

      转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Android四大组件学习系列Activity篇]       1.Android四大组件之--Activity(一)定义.状态和后退栈(图文详解)       2.Android四大组件之--Activity的生命周期(图文详解)      上一篇文章讲了Activity的定义.状态和后退栈,现在讲讲A

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

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

Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于U

Android开发入门(一)详解活动 1.1 Activity的生命周期

前言: 学习Android也有一年多了,目前在从事Android开发的工作.不敢说精通,但也小有心得 .相信很多android初学者和我刚开始接触android时一样,往往只了解某些知识点的表面,别人要是问点啥 ,还真就说不出个一二三来,往往处于"了解"阶段.所以,我打算将自己学习android的过程和经验总结整 理一下,发表出来,希望对学习android的同学有所帮助,也算给自己的学习进行总结吧.生命不息,学习不 止.一定要学会"享受"学习的过程,否则,学习起来就

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

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

android横竖屏切换时候Activity的生命周期_Android

1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+f12切换成横屏时 onSaveInstanceState--> onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4.再

Android中Activity的生命周期探讨_Android

1.完整生命周期 上图是Android Activity的生命周期图,其中Resumed.Paused.Stopped状态是静态的,这三个状态下的Activity存在时间较长. (1)Resumed:在此状态时,用户可以与Activity进行交互,Activity在最前端 (2)Paused:在此状态时,Activity被另外一个Activity遮盖,此Activity不可接受用户输入信息.另外一个Activity来到最前面,半透明的,但并不会覆盖整个屏幕. (3)Stopped:在此状态时,A

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

本文实例讲述了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开发中Activity的生命周期_Android

什么是Activity       首先,Activity是Android系统中的四大组件之一,可以用于显示View.Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了.        在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很