Android Activity生命週期詳解

       四大組件之一的Activity組件,在應用中一個Activity能夠用來表示一個界面,中文意思也能夠理解爲「活動」,即一個活動開始,表明Activity組件啓動,活動結束,表明一個Activity的生命週期結束。一個android應用必須經過Activity來運行和啓動,Activity的生命週期交給系通通一管理。前端

      有時間的童鞋還能夠去理解如下四個基本概念,將有助於咱們更好的瞭解Android系統內部機制:
java

Application、Activity、Activity棧、Taskandroid

三大基本狀態:app

  1. Resumed:一個新Activity啓動入棧後,它在屏幕最前端,處於棧的最頂端,此時它處於可見並可和用戶交互的激活狀態。
    ide

  2. Paused:當Activity被另外一個透明或者Dialog樣式的Activity覆蓋時的狀態。此時它依然與窗口管理器保持鏈接,系統繼續維護其內部狀態,因此它仍然可見,但它已經失去了焦健,因此不可與用戶交互。佈局

  3. Stoped:當Activity被另一個Activity覆蓋、失去焦點並不可見時處於的狀態。    測試

Activiy的生命週期:spa

  1. onCreate(Bundle savedInstanceState);code

  2. onStart();orm

  3. onRestart();

  4. onResume();

  5. onPause();

  6. onStop();

  7. onDestroy();

    Activity實際上是繼承了ApplicationContext這個類,咱們能夠重寫如下方法,以下代碼:

public class Activity extends ApplicationContext {
       protected void onCreate(Bundle savedInstanceState);        
       protected void onStart();           
       protected void onRestart();        
       protected void onResume();       
       protected void onPause();        
       protected void onStop();        
       protected void onDestroy();
}

       爲了便於理解,咱們能夠寫一個Demo,經過必定的操做來觀察Activity在生命週期中狀態的變化狀況。

第一步:新建一個Android工程,我這裏命名爲ActivityDemo.

第二步:修改ActivityDemo.java(我這裏從新寫了以上的七種方法,主要用Log打印),代碼以下:

package com.example.activityins;

import android.app.Activity;
import android.os.Bundle;

/**
 * Activity的三大狀態和七大生命週期方法分析
 */
public class MainActivity extends Activity {

	/**
	 * Activity建立時第一個調用的方法,一般咱們再該方法中加載佈局文件,初始化UI組件,事件註冊等等
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("MainActivity-onCreate");
	}

	/**
	 * 再onCreate方法以後調用,用於顯示界面,但當前用戶還不能進行交互
	 */
	@Override
	protected void onStart() {
		super.onStart();
		System.out.println("MainActivity-onStart");
	}

	/**
	 * 當activity從stopped狀態下被返回時調用,以後再調用onResume方法進入resumed狀態
	 */
	@Override
	protected void onRestart() {
		super.onRestart();
		System.out.println("MainActivity-onRestart");
	}

	/**
	 * 在onStart方法後調用,執行完了該方法後,用戶可進行交互,當前Activity進入resumed狀態
	 * 當activity從Paused狀態被從新返回時,會再次調用該方法,讓Activity進入resumed狀態
	 */
	@Override
	protected void onResume() {
		super.onResume();
		System.out.println("MainActivity-onResume");
	}

	/**
	 * 當其餘Activity(透明或窗口模式)進入時,調用該方法,讓當前Activity進入paused狀態
	 * 當前Activity依然是可見狀態,但不可交互。若是其餘更高優先級的APP須要內存時,當前Activity可能會被銷燬
	 * 當前Activity被返回時調用onResume方法
	 */
	@Override
	protected void onPause() {
		super.onPause();
		System.out.println("MainActivity-onPause");
	}

	/**
	 * 當其餘Activity徹底覆蓋該Activity時,調用該方法,當前Activity進入stopped狀態
	 * 當前Activity是不可見狀態。若是其餘更高優先級的APP須要內存時,當前Activity可能會被銷燬
	 * 當前Activity被返回時調用onRestart方法
	 */
	@Override
	protected void onStop() {
		super.onStop();
		System.out.println("MainActivity-onStop");
	}

	/**
	 * 當前activity被銷燬時調用,一般在該方法中用來釋放資源,當前activity被kill掉
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		System.out.println("MainActivity-onDestroy");
	}
}

接下來就是測試了,咱們一邊操做一邊觀察LogCat中的打印:

第一步:啓動項目

在這一步驟中,Activity前後執行了onCreate()->onStart()->onResume()三個方法。

第二步:點擊HOME鍵回到桌面

執行了onPause()->onStop()兩個方法,這個時候,activity依然存在,只是咱們看不到了,但並無被銷燬。

第三步:再次點擊應用圖標回到程序中,恢復頁面

執行了onRestart()->onStart()->onResume()三個方法

第四步:點擊BACK鍵退出程序

執行了onPause()->onStop()->onDestroy()三個方法,這個時候,程序被銷燬。

第五步:在啓動程序(也就是第一步)後,咱們點擊電源鍵鎖屏

第六步:點擊電源鍵點亮屏幕,並解鎖

還有其餘的狀況,好比,在第一步後面,從任務切換的地方進入另外一個應用程序,而後再回到咱們的測試程序中,等等。

這些你們能夠本身下來試一試。

如今,咱們再回到上面去看Activity生命週期圖,相信你們都能很容易的理解這張圖了。

相關文章
相關標籤/搜索