Android Activity的四種啓動模式和使用場景

Activity的啓動模式有四種:

  • standard
  • singleTop
  • singleTask
  • singleInstance

 

1、standard:標準模式

標準模式下,只要啓動一次Activity,系統就會在當前任務棧新建一個實例

使用場景:

正常的去打開一個新的頁面,這種啓動模式使用最多,最普通


2、singleTop:棧頂複用模式

1、當前棧中已有該Activity的實例並且該實例位於棧頂時,不會創建實例,而是複用棧頂的實例,並且會將Intent對象傳入,回調onNewIntent()方法;

2、當前棧中已有該Activity的實例但是該實例不在棧頂時,其行爲和standard啓動模式一樣,依然會創建一個新的實例;

3、當前棧中不存在該Activity的實例時,其行爲同standard啓動模式。

應用場景:

假如一個新聞客戶端,在通知欄收到了3條推送,點擊每一條推送會打開新聞的詳情頁,如果爲默認的啓動模式的話,點擊一次打開一個頁面,會打開三個詳情頁,這肯定是不合理的。如果啓動模式設置爲singleTop,當點擊第一條推送後,新聞詳情頁已經處於棧頂,當我們第二條和第三條推送的時候,只需要通過Intent傳入相應的內容即可,並不會重新打開新的頁面,這樣就可以避免重複打開頁面了


3、singleTask:站內複用模式

在複用的時候,首先會根據taskAffinity去找對應的任務棧:

1、如果不存在指定的任務棧,系統會新建對應的任務棧,並新建Activity實例壓入棧中。

2、如果存在指定的任務棧,則會查找該任務棧中是否存在該Activity實例

      a、如果不存在該實例,則會在該任務棧中新建Activity實例。

      b、如果存在該實例,則會直接引用,並且回調該實例的onNewIntent()方法。並且任務棧中該實例之上的Activity會被全部銷燬。

使用場景:

SingleTask這種啓動模式最常使用的就是一個APP的首頁,因爲一般爲一個APP的第一個頁面,且長時間保留在棧中,所以最適合設置singleTask啓動模式來複用


4、singleInstance:單實例模式

啓動該模式Activity的時候,會查找系統中是否存在: 

1、不存在,首先會新建一個任務棧,其次創建該Activity實例。 

2、存在,則會直接引用該實例,並且回調onNewIntent()方法。 

特殊情況:該任務棧或該實例被銷燬,系統會重新創建。

使用場景:

很常見的是,電話撥號盤頁面,通過自己的應用或者其他應用打開撥打電話頁面 ,只要系統的棧中存在該實例,那麼就會直接調用

 


 

 

 

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