Activity生命週期

2021-08-28 03:39:28 字數 3023 閱讀 9912

activity生命週期指activity從啟動到銷毀的過程 activity表現為三種狀態,分別是resumed狀態 、 paused狀態和stopped狀態:

resumed當activity在螢幕前台執行時(位於當前任務堆疊的頂部),此時該activity獲得了使用者的輸入焦點。 這個狀態也叫active或running狀態。

paused當它失去焦點但仍然對使用者可見時,它處於暫停狀態。此時,在它之上有另外乙個activity。這個activity也許是透明的,或者未能完全遮蔽全屏, 所以被暫停的activity仍對使用者可見。暫停的activity仍然是存活狀態(它保留著所有的狀態和成員資訊並連線至視窗管理器)。但當系統處於極低記憶體的情況下,仍然可以殺死這個activity。

stopped 如果它完全被另乙個activity覆蓋是,它處於停止狀態。它仍然保留所有的狀態和成員資訊。然而它不在為使用者可見,所以它的視窗將被隱藏。如果其它地方需要記憶體,則系統經常會殺死這個activity。

處於paused或stopped狀態的activity,可以被移除出記憶體,移除的先後順序是先stopped狀態的,後paused狀態的。一般paused狀態的activity也只是在資源極端不足的情況下,它所執行的程序才會被殺掉。

方法描述

下乙個oncreate()

在activity第一啟動時呼叫,你可以在這個方法中初始化資料,設定靜態變數,建立客戶檢視,繫結控制項資料等。這個方法入參 為乙個**包含了之前狀態的物件。隨後總是呼叫onstart方法。

onstart()

onrestart()

activity已經停止之後會被呼叫,僅僅發生在之前啟動過的activity上。隨後總是呼叫onstart方法。

onstart()

onstart()

當activity對使用者可見時呼叫,隨後有可能執行2個方法:如果當前activity展現到前端,使用者獲取輸入焦點,則呼叫onresume;如果對其進行隱藏,則呼叫onstop方法。

onresume()或onstop()

onresume()

在activity啟動並與使用者進行互動時呼叫,此時activity處於棧的頂部。隨後總是呼叫onpause方法。

onpause()

onpause()

在使用者打算啟動其他activity時呼叫,這個方法典型的工作為:提交未儲存的資料,停止動畫,及停止其他一切消耗cpu的操作。不管應用是否響應速度快,這些都是必須要做的工作,因為下乙個activity將不能恢復,直到這個方法返回為止。

onresume()或onstop()

onstop()

當activity對使用者不可見的情況下呼叫,也許是發生在activity正在銷毀或者其他activity恢復將其覆蓋的情況。如果activity再次回到前台與使用者互動則呼叫onrestart,如果關閉activity則呼叫ondestroy。

onrestart() 或ondestroy()

ondestory()

在activity銷毀前呼叫。

無在上圖中,可以從三個階段關注activity的生命週期:

ø 整個的生命週期,指的是oncreate(bundle)和ondestroy()之間過程。activity在oncreate()設定所有的「全域性」狀態,在ondestroy()釋放所有的資源。

ø 可見的生命週期,指的是onstart()和onstop()之間的過程。在這段時間,可以看到activity在螢幕上,儘管有可能不在前台,不能和使用者互動。在這兩個介面之間,需要保持顯示給使用者的ui資料和資源等。onstart(),onstop()都可以被多次呼叫,因為activity隨時可以在可見和隱藏之間轉換。

ø 前台的生命週期,指的是onresume()和onpause()之間的過程。在這段時間裡,該activity處於所有 activity的最上面,獲得了使用者焦點。activity可以經常性地在resumed和paused狀態之間切換,所以在這些介面方法中的**應該屬於非常輕量級的,避免低效的轉換而讓使用者有等待的感覺。

activity生命週期幾個典型的場景:

1.activity從被裝載到執行。則執行順序為:oncreate() -> onstart()-> onresume();     這是個典型過程,發生在activity被系統裝載執行時。

2.activity從執行到暫停,再到繼續回到執行。執行順序為:onpause() -> onresume();這個過程發生在activity被別的activity遮住了部分ui,失去了使用者焦點,另外那個activity退出之後,這個activity再次重新獲得執行。這個過程中該activity的例項是一直存在

3.activity從執行到停止。執行順序為:onpause() -> onstop() ;這個過程發生在activity的ui完全被別的activity遮住了,當然也失去了使用者焦點。這個過程中activity的例項仍然存在。比如,當activity正在執行時,按home鍵,該activity就會被執行這個過程。

4.activity從停止到執行。執行順序為:onrestart()-> onstart()-> onresume();處於stopped狀態並且例項仍然存在的activity,再次被系統執行時,執行這個過程。這個過程是3的逆過程,只是要先執行onrestart()而重新獲得執行。。

5.activity從執行到銷毀。執行順序為:onpause() -> onstop() -> ondestroy();這個過程發生在activity完全停掉並被銷毀了,所以該activity的例項也就不存在了。比如,當activity正在執行時,按back鍵,該activity就會被執行這個過程。這個過程可看作是1的逆過程。

6.被清除出記憶體的activity重新執行。執行順序為:oncreate() -> onstart()-> onresume();這個過程看起來對使用者是透明的,並不會知道這個過程的發生,看起來如同1的執行順序,不同的是如果儲存有系統被清除出內出時的資訊,會在呼叫oncreate()時,系統以引數的形式給出,而1中oncreate()的引數為null。

Activity生命週期

oncreate 設定activity所使用的布局檔案 按鈕繫結 等靜態設定操作 onstart 該activity能被我們看到的時候就會呼叫onstart onresume 能夠獲得使用者焦點 onpause 啟動另外乙個activity的時候就會呼叫第乙個activity的該方法 onstop ...

activity生命週期

乙個activity的啟動順序 oncreate onstart onresume 當另乙個activity啟動時 第乙個activity onpause 第二個activity oncreate onstart onresume 第乙個activity onstop 當返回到第乙個activity...

Activity 生命週期

activities 在系統中是以 activity 棧的形式被管理的。當乙個新的 activity 啟動時,它將會被放到棧的頂部並變成 running activity 上乙個activity 會被至於它的下面,在新 activity 存在期間它都不會到前端來。乙個 activity 有四個重要的...