四大組件之一的Activity組件,在應用中一個Activity能夠用來表示一個界面,中文意思也能夠理解爲「活動」,即一個活動開始,表明Activity組件啓動,活動結束,表明一個Activity的生命週期結束。一個android應用必須經過Activity來運行和啓動,Activity的生命週期交給系通通一管理。前端
有時間的童鞋還能夠去理解如下四個基本概念,將有助於咱們更好的瞭解Android系統內部機制:
java
Application、Activity、Activity棧、Taskandroid
三大基本狀態:app
Resumed:一個新Activity啓動入棧後,它在屏幕最前端,處於棧的最頂端,此時它處於可見並可和用戶交互的激活狀態。
ide
Paused:當Activity被另外一個透明或者Dialog樣式的Activity覆蓋時的狀態。此時它依然與窗口管理器保持鏈接,系統繼續維護其內部狀態,因此它仍然可見,但它已經失去了焦健,因此不可與用戶交互。佈局
Stoped:當Activity被另一個Activity覆蓋、失去焦點並不可見時處於的狀態。 測試
Activiy的生命週期:spa
onCreate(Bundle savedInstanceState);code
onStart();orm
onRestart();
onResume();
onPause();
onStop();
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生命週期圖,相信你們都能很容易的理解這張圖了。