Activity生命周期

转载文章地址:http://blog.csdn.net/tounaobun/article/details/8147119



最近在开发一个小小的应用,由于一个Activity里不仅要创建各种各样的类,而且要在恰当的时机释放掉被占用的资源。

由于生命周期方法是被自动调用的

因此,有必要了解Activity的生命周期方法的调用时间和顺序。


下面是一个简单的测试类,利用Android.util.Log的静态方法d(debug),i(info),e(error)等可以在LogCat里输出不同类型的日志信息(不同类型以不同的颜色区分)

[java]  view plain  copy
  1. package com.example.testlifecycle;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     private static final String TAG = "activity";  
  10.   
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         Log.d(TAG, "onCreate");  
  15.         setContentView(R.layout.activity_main);  
  16.     }  
  17.   
  18.     @Override  
  19.     protected void onPostCreate(Bundle savedInstanceState) {  
  20.         super.onPostCreate(savedInstanceState);  
  21.         Log.d(TAG, "onPostCreate");  
  22.     }  
  23.   
  24.     @Override  
  25.     protected void onStart() {  
  26.         super.onStart();  
  27.         Log.d(TAG, "onStart");  
  28.     }  
  29.   
  30.     @Override  
  31.     protected void onRestart() {  
  32.         super.onRestart();  
  33.         Log.d(TAG, "onRestart");  
  34.     }  
  35.   
  36.     @Override  
  37.     protected void onResume() {  
  38.         super.onResume();  
  39.         Log.d(TAG, "onResume");  
  40.     }  
  41.   
  42.     @Override  
  43.     protected void onPostResume() {  
  44.         super.onPostResume();  
  45.         Log.d(TAG, "onPostResume");  
  46.     }  
  47.   
  48.     @Override  
  49.     protected void onPause() {  
  50.         super.onPause();  
  51.         Log.d(TAG, "onPause");  
  52.     }  
  53.   
  54.     @Override  
  55.     protected void onStop() {  
  56.         super.onStop();  
  57.         Log.d(TAG, "onStop");  
  58.     }  
  59.   
  60.     @Override  
  61.     protected void onDestroy() {  
  62.         super.onDestroy();  
  63.         Log.d(TAG, "onDestroy");  
  64.     }  
  65.   
  66. }  

类一共有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方法)

[java]  view plain  copy
  1. /** 
  2.  * Called when the activity has detected the user's press of the back 
  3.  * key.  The default implementation simply finishes the current activity, 
  4.  * but you can override this to do whatever you want. 
  5.  */  
  6. public void onBackPressed() {  
  7.     finish();  
  8. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值