Activity生命週期與啟動模式

2021-07-12 01:02:28 字數 1279 閱讀 5356

生命週期請看這裡面寫的很詳細, 我就不贅述了。我主要說說activity的啟動模式:

注意:a、啟動模式是針對你要啟動的哪個activity而言

b、每乙個activity都可以為自己指定乙個棧名,也就是說在建立它時,它可以要求系統為他開闢一塊棧的空間,可在taskaffinity裡面設定。

c、一般會有多個棧,乙個前台任務棧,乙個後台任務棧(前後臺可以切換),具體多少看專案大小,這裡就是考研開發者的程式設計能力的時候了。

一、standard(標準模式):這是預設模式,每次啟用activity時都會重新建立activity例項,並放入任務棧中。記住是重新建立!就是說不管你的棧裡面有沒有你想建立的目標activity,他都會建立乙個新的,就是說可能你的棧裡面會出現兩個一模一樣的activity!我叫它比創模式。

二、singletop(棧頂復用模式): 如果在任務的棧頂正好存在該activity的例項,就重用該例項( 會呼叫例項的 onnewintent() ),否則就會建立新的例項並放入棧頂,即使棧中已經存在該activity的例項,只要不在棧頂,都會建立新的例項。就是說這個模式的只看棧頂情況,我叫它棧頂模式。

三、singletask(棧內復用模式):如果在棧中已經有該activity的例項,就重用該例項(會呼叫例項的 onnewintent() )。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移出棧。如果棧中不存在該例項,將會建立新的例項放入棧中。如果棧s1中情況是abc,這個時候activityd的啟動模式是singletask,d所需要的任務棧是s2,由於s2和d都不存在。所以系統會開闢一塊s2的棧空間,然後再例項乙個d放進去。這個模式雖然書上翻譯過來叫棧內復用模式,但是它其實管了棧內棧外,如果棧內有,則把它拿到棧頂,沒有則例項乙個新的;如果需要棧(上文中的s2)存在,則看棧內情況(如果棧內有,則把它拿到棧頂,沒有則例項乙個新的),如果不存在就自創乙個。我叫它棧內外模式。

四、singleinstance:在乙個新棧中建立該activity的例項,並讓多個應用共享該棧中的該activity例項。一旦該模式的activity例項已經存在於某個棧中,任何應用再啟用該activity時都會重用該棧中的例項( 會呼叫例項的 onnewintent() )。其效果相當於多個應用共享乙個應用,不管誰啟用該 activity 都會進入同乙個應用中。這種模式有乙個特點,除了有singletask模式的特點外,它還可以建立乙個其它任務棧裡面已經存在的activity,這裡其它任務棧有兩種情況:假設棧裡面有cd兩個activity,如果呼叫棧頂(d),那麼會把cd都調走,如果呼叫非棧頂(c),那麼會把d移除在把c調過去。

總之,要熟練這四種模式的建立棧和activity的特點,根據需求靈活運用。

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 有四個重要的...