android 中activity的生命週期

2021-06-19 13:49:55 字數 1608 閱讀 7882

activity的生命週期

activity首次啟動會呼叫 :oncreate()--->onstart()---->onresume()

按back鍵呼叫:onpause()--->onstop()---->ondestory()

按home鍵呼叫:onpause()--->onstop() ,再次進入呼叫:onrestart()--->onstart()--->onresume()

以下是各個方法的詳細說明:

oncreate():當 activity 第一次建立時會被呼叫。在這個方法中你需要完成所有的正常靜態設定 ,比如建立乙個檢視( view )、繫結列表的資料等等。如果能捕獲到 activity 狀態的話,這個方法傳遞進來的 bundle 物件將存放了 activity 當前的狀態。呼叫該方法後一般會呼叫 onstart() 方法。

onrestart():在 activity 被停止後重新啟動時會呼叫該方法。其後續會呼叫 onstart 方法。

onstart()à當 activity 對於使用者可見前即呼叫這個方法。如果 activity回到前台則接著呼叫 onresume() ,如果 activity 隱藏則呼叫onstop()

onresume():在 activity 開始與使用者互動前呼叫該方法。在這時該activity 處於 activity 棧的頂部,並且接受使用者的輸入。其後續會呼叫 onpause() 方法。

onpause():在系統準備開始恢復其它 activity 時會呼叫該方法。這個方法中通常用來提交一些還沒儲存的更改到持久資料 中,停止一些動畫或其它一些耗 cpu 的操作等等。無論在該方法裡面進行任何操作,都需要較快速完成,因為如果它不返回的話,下乙個 activity 將無法恢復出來。如果 activity 返回到前台將會呼叫 onresume() ,如果 activity 變得對使用者不可見了將會呼叫onstop() 。

onstop():在 activity 對使用者不可見時將呼叫該方法。可能會因為當前 activity 正在被銷毀,或另乙個 activity (已經存在的activity 或新的 activity )已經恢復了正準備覆蓋它,而呼叫該方法。如果 activity 正準備返回與使用者互動時後續會呼叫onrestart ,如果 activity 正在被釋放則會呼叫 ondestroy 。

ondestroy():在 activity 被銷毀前會呼叫該方法。這是 activity 能接收到的最後乙個呼叫。可能會因為有人呼叫了 finish 方法使得當前activity 正在關閉,或系統為了保護記憶體臨時釋放這個 activity的例項,而呼叫該方法。你可以用 isfinishing 方法來區分這兩種不同的情況。

activity有四種載入模式:

standard:intent後每次都會建立新的activity例項

singletask :會檢查堆疊中是否有該例項

,如果沒有就會建立乙個例項,否則不建立,startactivity後的呼叫類似於home鍵後再進入activity

singleinstance:同singletask,還有自身特點  該模式下的activity單獨在乙個棧中,且棧中只有乙個activity

singletop:如果activity位於棧點,不會建立新的例項,否則會創新的例項,

android基本程式單元Activity

activity提供了和使用者互動的視覺化介面,建立乙個activity一般都繼承了activity,覆蓋了activity的oncreat方法.在該方法中呼叫setcontentview的方法展示要顯示的檢視.呼叫findviewbyid方法例項化元件.activity只有在清單檔案中宣告才能使用...

android 顯式 隱式啟動activity

android啟動activity分為顯式啟動和隱式啟動。顯式啟動時,指定被啟動activity類,系統啟動被指定的activity類。隱式啟動時,指定action category,系統會拿action category去androidmanifest.xml中匹配,匹配的activity啟動。某...

listactivity與activity的區別

listactivity實際上是listview和activity的結合體。也就是說,乙個listactivity就是只包含乙個listview元件的activity。在listactivity類內部通過 來建立listview物件,因此,使用listactivity並不需要使用xml布局檔案來定義...