產品提出一個需求,需要從Activity1跳轉到Activity3,但從Activity3返回時要返回到Activity2。
最初的實現方式是,從Activity3返回(調用finish())時,從Activity3啓動Activity2。
這種方式不太好。首先,從顯示上,用戶會在Activity3消失後看到一段時間的Activity1,再看到Activity2。這是由於當啓動Activity2需要時間長時,Activity3 finish()後,app先執行Activity1的onRestart、onStart、onResume、onPause,再執行Activity2的onCreate、onStart、onResume。這樣會導致Activity3消失後,Activity1先恢復顯示,再顯示activity2。另外,從代碼編寫角度,activity3執行finish()的地方,都要寫一份啓動activity2的啓動代碼,代碼維護性不好。
之後採用Activity1“同時”啓動Activity2、Activity3的方式,實現了預期的效果。代碼如下:
Intent intent = new Intent(this, MyActivity2.class);
startActivity(intent);
Intent intent2 = new Intent(this, MyActivity3.class);
startActivity(intent2);
問題雖然解決,但我很好奇,這個過程中Activity棧的結構是如何變化的?
看到的現象是從Activity1打開Activity3,從Activity3返回時,看到的是Activity2;當從Activity2返回,看到的纔是Activity1。好像棧的結構是1->2->3。
經過測試,實際上是Activity1先啓動Activity3,從Activity3返回時時,會啓動Activity2。具體的棧結果是1->3,然後變爲1->2。
具體的測試結果:
一、Activity1啓動
二、Activity1 啓動Activity3
三、從Activity3返回 此時啓動Activity2
四、從Activity2返回
測試源碼:
http://download.csdn.net/detail/zhxlxh/9440381