Activity 的生命周期,这可能是目前最全的
为了便于大家更好的理解,我简单的写了一个 Demo,不明白 Activity 周期的朋友们,可以亲手实践一下,大家按照我的步骤来。
第一步:新建一个 Android 工程,我这里命名为 ActivityDemo.
第二步:修改 ActivityDemo.java(我这里重新写了以上的七种方法,主要用 Log 打印),代码如下:
[java]? view plain copy
- 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.onDest 
roy();??
- ????????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 plain copy
- <?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 plain copy
- 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~~~");?? 











 
    
评论