Android Activity生命周期

当用户需要对手机通过屏幕进行交互时,比如打一个电话,拍张照片,发送一个邮件,或者查看地图。开发者就需要实现一个活动(Activity)。每个活动都将作为一个提供用户使用接口的窗口。它可以填满整个屏幕,也可以小于、大于屏幕甚至漂浮在其它窗口上面。作为android应用程序中最重要的四大组件之一。今天我们来学习一下Android中Activity的生命周期

首先,创建一个android project,包含两个ActivityA和ActivityB
分十种情况讨论

第一,正常启动Activity A,输出结果如下:

 

第二,从ActivityA跳到ActivityB,并且ActivityB全屏。即ActivityA被ActivityB完全完全覆盖,输出结果如下:

第三,在第二种的情况下,从ActivityB返回到ActivityA,输出结果如下:

第四,从ActivityA跳到ActivityB,并且ActivityB非全屏。即ActivityA没有被ActivityB完全完全覆盖,输出结果如下:

第五,在第四种的情况下,从ActivityB返回到ActivityA,输出结果如下:

 

第六,在第一种情况下,点击home键,输出结果如下:

第七,在第六种的情况下,长按home键盘,从任务管理器中调出ActivityA,输出结果如下:

第八,在第一种情况下,点击电源键,输出结果如下:

第九,在第八种的情况下,在打开电源键回到ActivityA,输出结果如下:

第十,退出ActivityA,输出结果如下:

          在对上述十种情况讨论完,可能觉得有点复杂,其实一点都不复杂,在梳理一下。首先最容易发现的是onCreate和onDestroy从头到尾都只执行了一次。onCreate在一个活动最先开始启动的时候执行了一次,onDestroy在活动结束关闭的时候执行了一次。另外可以发现除了在第四五两种情况下,其余情形的结果都相同,离开活动A,则A一次执行onPause和onStop,并且返回A的时候,一次执行onRestart、onStart和onResume。于是可以得出如下结论。只要不是在A进入到非全屏的其它活动中,则A执行onPause和onStop,反之只执行一个onPause,从其它活动返回,A执行onRestart、onStart和onResume,反之执行onResume。

          在测试四五两种情况的时候,只要在AndroidManifest.xml中队ActivityB的节点中添加如下一行代码:

          android:theme="@android:style/Theme.Dialog"

附活动ActivityA代码:

  1. package com.yuxianglong.view;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.View;  
  8. import android.widget.Button;  
  9.   
  10. /** 
  11.  *  
  12.  * @ClassName: ActivityA 
  13.  * @Description: 对Activity生命周期的测试,重载了onCreate,onStart,onResume, 
  14.  *               onStop,onPause 
  15.  *               onDestroy,onRestart七个方法 
  16.  * @author gyz 
  17.  * @date 2014-7-9 上午10:55:37 
  18.  *  
  19.  */  
  20. public class ActivityA extends Activity {  
  21.   
  22.     private Button button;  
  23.     private String Tag = "yuxlong2010";  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         Log.d(Tag, "I‘m  onCreate");  
  29.         setContentView(R.layout.activity_a);  
  30.         button = (Button) findViewById(R.id.button);  
  31.         button.setOnClickListener(new View.OnClickListener() {  
  32.               
  33.             @Override  
  34.             public void onClick(View v) {  
  35.                 // TODO Auto-generated method stub  
  36.                 startActivity(new Intent(ActivityA.this,ActivityB.class));  
  37.             }  
  38.         });  
  39.     }  
  40.   
  41.     @Override  
  42.     protected void onStart() {  
  43.         // TODO Auto-generated method stub  
  44.         super.onStart();  
  45.         Log.d(Tag, "I‘m  onStart");  
  46.     }  
  47.   
  48.     @Override  
  49.     protected void onResume() {  
  50.         // TODO Auto-generated method stub  
  51.         super.onResume();  
  52.         Log.d(Tag, "I‘m  onResume");  
  53.     }  
  54.   
  55.     @Override  
  56.     protected void onStop() {  
  57.         // TODO Auto-generated method stub  
  58.         super.onStop();  
  59.         Log.d(Tag, "I‘m  onStop");  
  60.     }  
  61.   
  62.     @Override  
  63.     protected void onDestroy() {  
  64.         // TODO Auto-generated method stub  
  65.         super.onDestroy();  
  66.         Log.d(Tag, "I‘m  onDestroy");  
  67.     }  
  68.   
  69.     @Override  
  70.     protected void onRestart() {  
  71.         // TODO Auto-generated method stub  
  72.         super.onRestart();  
  73.         Log.d(Tag, "I‘m  onRestart");  
  74.     }  
  75.   
  76.     @Override  
  77.     protected void onPause() {  
  78.         // TODO Auto-generated method stub  
  79.         super.onPause();  
  80.         Log.d(Tag, "I‘m  onPause");  
  81.     }  
  82. }  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。