提到Activity生命周期,咱们先看看Android API 提供的生命周期图
我们从上图可以看到,最一开始进入的是onCreate方法,
然后分别有onStart、onResume、onPause、onStop、onRestart 这些方法
最后是onDetrory方法结束
有了大概了解之后,咱们再打开Activity类的源码,其中在它的顶部注释196行开始有那么一段代码:
<pre class="prettyprint"> * 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(); * } * </pre>
原来Activity是继承ApplicationContext 类,下面我们重写一下这个类的这些方法,
来看看这些方法到底是按照什么顺序来执行的。
第一步:
首先咱们先新建一个Android工程,命名为LifeCycle;
创建之后,打开MainActivity.
第二步:
修改MainActivity,代码如下:
package com.hh.android; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("======== onCreate ========"); } @Override protected void onStart() { super.onStart(); System.out.println("======== onStart ========"); } @Override protected void onRestart() { super.onRestart(); System.out.println("======== onRestart ========"); } @Override protected void onResume() { super.onResume(); System.out.println("======== onResume ========"); } @Override protected void onPause() { super.onPause(); System.out.println("======== onPause ========"); } @Override protected void onStop() { super.onStop(); System.out.println("======== onStop ========"); } @Override protected void onDestroy() { super.onStop(); System.out.println("======== onDestroy ========"); } }
接着运行程序,咱们可以看到Log打印的信息:
08-03 13:50:45.818: INFO/System.out(273): ======== onCreate ========
08-03 13:50:45.818: INFO/System.out(273): ======== onStart ========
08-03 13:50:45.818: INFO/System.out(273): ======== onResume ========
它的依次顺序为: onCreate --> onStart --> onResume
接着,按下返回键,Log信息为:
08-03 13:57:39.236: INFO/System.out(273): ======== onPause ========
08-03 13:57:39.527: INFO/System.out(273): ======== onStop ========
08-03 13:57:39.527: INFO/System.out(273): ======== onDestroy ========
依次顺序为:onPause --> onStop --> onDestroy
package com.hh.android; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); System.out.println("======== SecondActivity onCreate ========"); } @Override protected void onStart() { super.onStart(); System.out.println("======== SecondActivity onStart ========"); } @Override protected void onRestart() { super.onRestart(); System.out.println("======== SecondActivity onRestart ========"); } @Override protected void onResume() { super.onResume(); System.out.println("======== SecondActivity onResume ========"); } @Override protected void onPause() { super.onPause(); System.out.println("======== SecondActivity onPause ========"); } @Override protected void onStop() { super.onStop(); System.out.println("======== SecondActivity onStop ========"); } @Override protected void onDestroy() { super.onStop(); System.out.println("======== SecondActivity onDestroy ========"); } }
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 代码添加处开始 --> <activity android:name=".SecondActivity" /> <!-- 代码添加处结束 --> </application>
<?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" /> <!-- 代码添加处开始 --> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击我"/> <!-- 代码添加处结束 --> </LinearLayout>
package com.hh.android; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { /** * 点击进入SecondActivity的按钮 */ private Button mBtn; /** * 当前上下文 */ private Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println("======== onCreate ========"); //设置当前上下文 mContext = this; //根据ID得到Button mBtn = (Button)findViewById(R.id.btn); //设置点击监听 mBtn.setOnClickListener(mClickListener); } @Override protected void onStart() { super.onStart(); System.out.println("======== onStart ========"); } @Override protected void onRestart() { super.onRestart(); System.out.println("======== onRestart ========"); } @Override protected void onResume() { super.onResume(); System.out.println("======== onResume ========"); } @Override protected void onPause() { super.onPause(); System.out.println("======== onPause ========"); } @Override protected void onStop() { super.onStop(); System.out.println("======== onStop ========"); } @Override protected void onDestroy() { super.onStop(); System.out.println("======== onDestroy ========"); } Button.OnClickListener mClickListener = new Button.OnClickListener() { @Override public void onClick(View v) { //启动进入新的activity mContext.startActivity(new Intent(mContext, SecondActivity.class)); } }; }