Android singleTask 和singleInstance的區別


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

關於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。

 


免責聲明!

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



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