转载文章地址:http://blog.csdn.net/tounaobun/article/details/8147119
最近在开发一个小小的应用,由于一个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();
- }
-