最近在开发一个小小的应用,由于一个Activity里不仅要创建各种各样的类,而且要在恰当的时机释放掉被占用的资源。
由于生命周期方法是被自动调用的
因此,有必要了解Activity的生命周期方法的调用时间和顺序。
下面是一个简单的测试类,利用android.util.Log的静态方法d(debug),i(info),e(error)等可以在LogCat里输出不同类型的日志信息(不同类型以不同的颜色区分)
package com.example.testlifecycle;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private static final String TAG = "activity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
setContentView(R.layout.activity_main);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
Log.d(TAG, "onPostCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.d(TAG, "onPostResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
该类一共有9个方法,分别打印不同的消息。
它们分别是onCreate,onPostCreate,onStart,onRestart,onResume,onPostResume,onDestroy,onPause,onStop
当启动该该程序时,首先进入该Activity,我们来看下LogCat的输出信息:
由此可知,当打开一个Activity时,调用顺序是:
onCreate->onStart->onPostCreate->onResume->onPostResume
下面分别进行不同的操作:
1.点击Back键(后退键)
从打印信息知道:
调用顺序是: onPause->onStop->onDestroy
2.如果按Home键(像房子的按钮)
可以看出,它和back键的区别是没有调用onDestroy方法
测试完back键和home键(menu键不会调用任何生命周期方法)
下面测试下两个Activity之间跳转:
我在第一个Activity内加了一个按钮,可以跳转到第二个Activity(别忘了注册),第二个Activity的日志输出为了和第一个Activity区别,特意加了一个"2"字(没其他意思,呵呵)
当打开第一个Activity后,点击按钮,进入下一个Activity:
可以看出,跳转到第二个Activity前,先调用了onPause方法,然后和打开第一个Activity一样,分别调用了onCreate->onStart->onPostCreate->onResume->onPostResume
最后!!第一个Activity调用了onStop方法。
下面,我们在点击Back键,返回到第一个Activity:
和上面的有点类似,首先第二个Activity调用onPause方法,然后第一个方法会先调用onRestart方法,然后调用onStart方法,接着onResume->onPostResume,最后第二个Activity调用了onStop->onDestroy方法。
以下是我的一些总结:
1 如果用户点击了后退键,除非重写了onBackPressed方法,否则一定会调用onDestroy方法(因为基类Activity对方法的实现是调用finish方法)
/**
* Called when the activity has detected the user's press of the back
* key. The default implementation simply finishes the current activity,
* but you can override this to do whatever you want.
*/
public void onBackPressed() {
finish();
}
2 onCreate方法以及onPostCreate方法有且仅调用一次。
3 切换到其他Activity时,该Activity会调用onPause,接着另外一个Activity调用一些方法后,会再调用前一个Activity的onStop方法,下一次回到该Activity时,会调用onRestart方法。
4 一个Activity切换到第二个Activity后,前一个Activity被压入栈中。
本来还向测试如果待机会触发什么生命周期方法,结果数据线不见了。。。。
参考网站:http://wsj.wikidot.com/android:1
Over...