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~~~");??
评论