提到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));
}
};
}