Android singleTask 和singleInstance的區別

來源:互聯網
上載者:User

標籤:

上周三去了網易面試被問到了這個問題,當時沒有回答正確,回來以後特地寫了一個程式研究一下。

關於Android activity的啟動模式一共有四種 standard singleTop singleTask singleInstance 這四種

standard 和singleTop都比較好理解,這裡主要研究一下 singleTask singleInstance的區別

首先是:singleTask

 假設有兩個Activity 分別是A 和 B ,Activity A的啟動模式是standard Activity B的啟動模式是singleTask, A中可以啟動B,同時B中也可以啟動A

通過A 啟動B ,可以發現 A B的taskId是相同的,說明A和B運行在同一個棧裡面,然後通過B啟動A 此時的A也是在這個棧裡,現在這個棧裡從棧底到棧頂的順序依次是 A—B—A,之後通過A再次啟動B這個時候B的lanchMode就起作用了。通過測試發現 棧裡不會產生新的B的執行個體,以前的時候起總以為棧裡是這樣的 A—A—B (ps:當時 面試的時候我就是這樣回答的)實際運行結果是 A—B 中間的A直接被銷毀了。

接著是:singleInstance

假設有兩個Activity 分別是A 和 B ,Activity A的啟動模式是standard Activity B的啟動模式是singleInstance, A中可以啟動B,同時B中也可以啟動A

通過A啟動B,可以發現A B的taskId是不相同的,說明A啟動B的時候產生了一個新的棧,B運行在一個新的棧裡面,時候通過B再次啟動A  現在兩個棧裡面的情況分別是 這樣的,原來的棧:A—A 新的棧:B 

然後通過A再次啟動B可以發現在新的棧裡並沒有產生新的B的執行個體  新的棧依舊是:B 只不過B被顯示到了最前面;

 

總結:singleTask 和singleInstance的區別是:singleTask不會產生新的棧, singleInstance第一次調用的時候則會產生新的棧, singleTask模式下 如果原來的棧裡已經存在要調用的Activity的執行個體,下次調用的時候會銷毀中間所有的Activity。

 

Android singleTask 和singleInstance的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.