Android Activity那點事

周雲鋒_2018發表於2018-04-25

一:Activity的四種啟動模式及使用場景:

四種啟動模式介紹:

1. standard

    預設啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中。

2. singleTop

    如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項)。

3. singleTask

    如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中。 如果在manifest中設定activity的launchMode為SingleTask或者是SingleTop 當activity任務棧存在該例項時,我們使用startActivity開啟該activity時就會呼叫它的onNewIntent()方法而不是呼叫onCreate().

4. singleInstance

    可分為兩種情況:
   1.如果將要啟動的目標Activity不存在,系統將會建立一個全新的Task棧,在建立目標Activity例項,並將它加入到新的Task棧頂。
   2.如果將要啟動的目標Activity已經存在,無論它位於那個程式中、位於哪個Task棧中,系統都會將該Activity所在的Task轉到前臺,從而使該Activity顯示出來。
複製程式碼

應用場景: 1.singleTop適合接收通知啟動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都開啟一個新聞內容頁面是很煩人的。聊天的對話視窗,

2.singleTask適合作為程式入口點。例如瀏覽器的主介面。不管從多少個應用啟動瀏覽器,只會啟動主介面一次,其餘情況都會走onNewIntent,並且會清空主介面上面的其他頁面。之前開啟過的頁面,開啟之前的頁面就ok,不再新建;singleTask:a介面購物,b介面確認訂單,c介面付款,如果付款成功會跳到a,如果不付款則返回b,這時候重啟a就會用到singleTask.

3.singleInstance適合需要與程式分離開的頁面。例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設定分離。singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出後,在此啟動,首先開啟的是B。

4.standard 標準的啟動模式,也是預設的啟動模式。

二:onNewIntent呼叫時機及Activity的四種啟動模式:

singleInstance: 第一次進入:onCreate onStart 在棧頂再次進入: onNewIntent 不在棧頂再次進入:onNewIntent onRestart onStart 按home鍵再次進入:onRestart onStart 按返回鍵:onRestart onStart

standard: 第一次進入:onCreate onStart 在棧頂再次進入: onCreate onStart 不在棧頂再次進入:onCreate onStart 按home鍵再次進入:onRestart onStart 按返回鍵:onRestart onStart

singleTop: 第一次進入:onCreate onStart 在棧頂再次進入:onNewIntent 不在棧頂再次進入:onCreate onStart 按home鍵再次進入:onRestart onStart 按返回鍵:onRestart onStart

singleTask: 第一次進入:onCreate onStart 在棧頂再次進入:onNewIntent 不在棧頂再次進入:onNewIntent onRestart onStart 按home鍵再次進入:onRestart onStart 按返回鍵:onRestart onStart

相關文章