Android生命週期介紹

          什麼是Activity,簡單的說:Activity就是佈滿整個窗口或者懸浮於其他窗口上的交互界面。在一個應用程序中通常由多個Activity構成,都會在Manifest.xml中制定一個主Activity,如

下設置

<activity
			android:name=".ActionViewTest"
			android:label="@string/title_activity_action_view_test">
<!-- android:name=".ActionViewTest表示整個應用程序的主程序的名稱
	<intent-filter>意圖過濾器:用於過濾用戶的一些動作和操作
	"android.intent.action.MAIN"表示當前程序是否在程序是整個工程的入口程序
	category android:name表示決定應用程序是否在程序列表中顯示-->			
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.action.MAIN" />
			</intent-filter>
		</activity>

        當程序第一次運行時用戶就會看這個Activity,這個Activity可以通過啓動其他的Activity進行相關的操作。

       當啓動其他的Activity時這個當前的這個Activity將會停止,新的Activity將會停止,新的Activity將會壓入棧中,同時獲取 用戶焦點,這是就可在這個Activity上操作了。

       我們都知道棧是先進後出的原則,那麼當用戶按Back鍵時,當前的這個Activity銷燬,前一個Activity重新恢復。

       我們來看看Activity生命週期的7個方法和3個階段

       7個方法如下:

       void onCreate(Bundle savedInstanceState)

       void onStart()

       void onRestart()

      void onPause()

     void onStop()

      void onDestroy()

Activity的三個階段:

開始Activity:在這個階段依次執行3個生命週期的方法,分別是onCreare,onStart,onResume方法。

Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個生命週期,分別是onRestart,onStart,onResume

關閉Activity,當Activity被關閉是系統會依次執行3個生命週期,分別是onPause,onStoo,onDestroy


     從上圖可以看出有兩層循環,第一層是焦點的獲得與失去循環,onResume()->onPause->onResume()。

     第二層是可視與不可視的循環,onStart->onResume->onPause->onStop->onRestart。

     具體週期如下:

     整個生命週期:onCreat->onDestroy

     焦點生命週期:onResume->onPause

     可視生命週期:onStart->onStop()

     示例源代碼如下:

package com.example.lifedemo;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
    private final String TAG = "MainActivity";
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(TAG, "onCreate is execute");
	}
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i(TAG, "onStart is execute");
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i(TAG, "onResume is execute");
	}
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i(TAG, "onPause is execute");
	}
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i(TAG, "onStop is execute");
	}
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i(TAG, "onDestroy is execute");
	}
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i(TAG, "onRestart is execute");
	}
	
}

首先運行程序

運行onCreat->onStart->onResume獲得焦點



然後模擬打電話onPause->onStop失去焦點//在兩個步驟之間執行第二個Avtivity的onCreate onStart onResume

同時注意只有第一個Activity被全部遮蓋纔會調用onStop,如果只是調用了一個對話框是不會沒有全部遮蓋就不會調用onStop了。

然後推出打電話狀態onRestart->onStart->onResume重新獲得焦點//開始第二個Activity先執行onPause,在最後會執行第二個Activity的onStop onDestory

最後back鍵onPause->onStop->onDestroy程序結束


onDestory在執行了finish()或系統資源不夠用是會被調用。


發佈了41 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章