標籤: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代碼:
[java] view plaincopy
- package com.yuxianglong.view;
-
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
-
- /**
- *
- * @ClassName: ActivityA
- * @Description: 對Activity生命週期的測試,重載了onCreate,onStart,onResume,
- * onStop,onPause
- * onDestroy,onRestart七個方法
- * @author gyz
- * @date 2014-7-9 上午10:55:37
- *
- */
- public class ActivityA extends Activity {
-
- private Button button;
- private String Tag = "yuxlong2010";
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Log.d(Tag, "I‘m onCreate");
- setContentView(R.layout.activity_a);
- button = (Button) findViewById(R.id.button);
- button.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- startActivity(new Intent(ActivityA.this,ActivityB.class));
- }
- });
- }
-
- @Override
- protected void onStart() {
- // TODO Auto-generated method stub
- super.onStart();
- Log.d(Tag, "I‘m onStart");
- }
-
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- Log.d(Tag, "I‘m onResume");
- }
-
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- super.onStop();
- Log.d(Tag, "I‘m onStop");
- }
-
- @Override
- protected void onDestroy() {
- // TODO Auto-generated method stub
- super.onDestroy();
- Log.d(Tag, "I‘m onDestroy");
- }
-
- @Override
- protected void onRestart() {
- // TODO Auto-generated method stub
- super.onRestart();
- Log.d(Tag, "I‘m onRestart");
- }
-
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- super.onPause();
- Log.d(Tag, "I‘m onPause");
- }
- }
Android Activity生命週期