Activity次級頁面和主頁間來回跳轉,防止重複創建Activity實例

很多時候,在進入詳情頁或次級頁面的時候,最後會返回到上一個Activity。在返回時,一般用Intent去啓動。但是如果單純地使用

Intent intent = new Intent(A.this, B.class) ;
startActivity(intent) ;

你會發現,多次地從A進入B,又從B回到A,然後這兩個Activity就會一直創建。打log發現兩個Activity的onCreate方法一直調用,而棧裏也一層一層地疊着這倆Activity的實例。當你按返回鍵準備返回時,發現並不能實現從次級頁面返回到主頁,然後退出應用這一流程,會把棧裏所有創建的實例都出棧完了纔會退出。

怎麼實現無論點擊多少次互相跳轉,當頁面在主頁A的時候,點擊返回時都會退出應用。即A Activity在棧中只有一個實例。

方法1:在Manifest裏設置主頁(A)的launchMode爲singleTask,這樣每次從次級頁面返回時,會將主頁A上面的Activity清空,讓A重新回到棧頂。這樣無論點擊多少次AB跳轉,都不會出現從主頁返回到了次級頁面。

方法2:在代碼中由B啓動A時,給Intent設置Flag。

Intent intent = new Intent(B.this, A.class) ;
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ;
startActivity(intent) ;

FLAG_ACTIVITY_CLEAR_TOP也會清空目標Activity(A)和它上面的所有Activity,並且重新創建A,所以在B跳轉A時,打Log會發現,

A onDestroy()
A onCreate()
B onDestroy()

問題是解決了,但是A重新創建了一次,A畢竟是主頁,是很多次級Activity返回的終點,不想A重新創建,怎麼辦?
可以給主頁A設置launchMode爲singleTask,這樣A就不會重新創建了(A -> B ->A -> B -> A -> B ->A):

 A onCreate
 B onCreate
 B onDestroy
 B onCreate
 B onDestroy
 B onCreate
 B onDestroy

可以看到,無論AB之間互相跳轉多少次,都不會重新創建A,只是身爲次級頁面的B會一直創建,當然,很多情況下,次級頁面只會進入一次,比如新建××,修改××,這種次級頁面會隨着任務的完成而結束,銷燬也是應該的。

發佈了51 篇原創文章 · 獲贊 26 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章