“同時”啓動兩個Activity

       產品提出一個需求,需要從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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章