我對standard、singleTop、singleTask和singleInstance四種Activity啟動模式的理解


之前自學android的時候,單從視頻和書本上對這四種啟動模式僅僅有了初步的字面上的理解。最近實戰了下,也對這四種啟動模式有了比較清晰的概念。
首先說下什么是Activity,按照我的理解,我們在手機上看到的每一個頁面都是一個Activity,包括系統的桌面,也是一個Activity。
要啟動一個Activity有四種模式:standard(標准啟動模式)、singleTop、singleTask、singleInstance。
 
注: Aty1_1和Aty2_1為兩個不同的Activity,Aty1_1和Aty1_2為同一個Activity中的不同實例。
1. standard
    不同的Activity在同一個棧中,
    每次創建新實例的時候,新實例便會堆放到棧頂。
    
      當點返回鍵的時候,便會從棧頂按順序將實例移除棧。直至棧為空則退回到桌面。
 
2. singleTop
    不同的Activity在同一個棧中。   
    ① 如果此時Aty1的實例在棧頂,此時再創建一個新的Aty1並不會成功。
    
    ② 如果Aty_1不在棧頂,此時再創建一個Aty1的實例,會產生一個新的Aty1實例到棧頂。
    
    當點返回鍵的時候,便會從棧頂按順序將實例移除棧。直至棧為空則退回到桌面。
    
3. singleTask
    不同的Activity在同一個棧中。
    ① 如果此時Aty1的實例在棧頂,此時再創建一個新的Aty1並不會成功。
  
    ② 如果Aty_1不在棧頂,此時再創建一個Aty1的實例,頁面會返回到任務棧中存在的Aty1的實例,並將Aty1上面所有的實例移出棧。
    
    當點返回鍵的時候,便會從棧頂按順序將實例移除棧。直至棧為空則退回到桌面。
 
4. singleInstance
    不同的Activity 處於不同棧中
    ① 如果此時Aty1的實例在棧頂,此時再創建一個新的Aty1並不會成功。
   
    ② 如果此時Aty2的實例還未被創建,則創建的Aty2的實例時會存放到一個新的任務棧中。
    
    ③ 如果此時Aty1的實例已存在且我們在Aty2的頁面中創建新的Aty1實例時,則不會創建新的Aty1實例,而是頁面跳轉到原來任務棧中存在的Aty1的實例,但存放Aty2實例的任務棧仍然存在
    
      
    當點返回鍵的時候,便會依次銷毀相應的任務棧,直至任務棧數為空則退回到系統桌面。
 
以上是我對安卓四種Activity啟動模式的理解,如果有不對的地方還望指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM