基礎篇之一:Activity生命週期

  學習技術,對技術文檔或者經典技術書籍來說。指望看一遍就懂,那是不大可能的。所以沒事回頭總結下只是,不要認爲基礎就不去總結。

 進來回顧了下Activity的生命週期,看了相關相關官方文檔,對以前的認知有了新的改善。

   首先來看下一張經典的生命週期流程圖:


相信大家都很熟悉吧,創建實例、初始化、銷燬實例等;

1.啓動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。

3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。

4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後臺:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。

5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。

6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。

7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。

我們就來操作一下這個Activity,看看它的生命週期到底是個什麼樣的過程:

package com.example.demo.Activitydemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    //創建Activity時調用
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("1", "onCreate創建");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("2", "onStart啓動");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("3", "onResume初始化");
    }
    //Activity被覆蓋到下面或者鎖屏時被調用
    @Override
    protected void onPause() {
        super.onPause();
        Log.i("4", "onpause正在停止");
        //有可能在執行完onPause或onStop後,系統資源緊張將Activity殺死,所以有必要在此保存持久數據
    }
    //退出當前Activity或者跳轉到新Activity時被調用
    @Override
    protected void onStop() {
        super.onStop();
        Log.i("5", "onStop停止");
    }

    //退出當前Activity時被調用,調用之後Activity就結束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("6", "ondestroy銷燬");
    }
    /**
     * Activity被系統殺死時被調用.
     * 例如:屏幕方向改變時,Activity被銷燬再重建;當前Activity處於後臺,系統資源緊張將其殺死.
     * 另外,當跳轉到其他Activity或者按Home鍵回到主屏時該方法也會被調用,系統是爲了保存當前View組件的狀態.
     * 在onPause之前被調用.
     */
}



1.啓動Activity:我們打開應用時先後執行了onCreate()->onStart()->onResume三個方法,看一下LogCat視窗如下:


在系統調用了onCreate和onStart之後,調用了onResume,自此,Activity進入了運行狀態。

2.按HOME鍵;當我們打開應用程序時,比如瀏覽器,我正在瀏覽NBA新聞,看到一半時,我突然想聽歌,這時候我們會選擇按HOME鍵,然後去打開音樂應用程序,而當我們按HOME的時候,Activity先後執行了onPause()->onStop()這兩個方法,這時候應用程序並沒有銷燬。


3.退出:當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先後調用onPause()->onStop()->onDestory()三個方法


4.最後onDestory方法被調用,標誌着終結。

5.而當我們再次啓動ActivityDemo應用程序時,則先後分別執行了onRestart()->onStart()->onResume()三個方法.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章