startActivitystartActivities有什么不同?
問題
平時用startActivity用習慣了,當別人問你startActivities是什么意思時,你會不假思索的說,可能是同時啟動多個activity吧,這簡直就是一道送命題啊,驗證之后才發現不是想象中那么簡單。
準備三個ActivityA,ActivityB,ActivityC:
   
 準備代碼:
結果展示為:
 
可以看到,先展示是ActivityC,然后是ActivityB,最后是ActivityA,那么情況是不是這樣的:我startActivities時,ActivityA、ActivityB和ActivityC都被創建了,只是依次壓入棧底了,我finish掉ActivityC,清除了棧頂,然后ActivityB就可見了,清除ActivityB之后,ActivityA就到棧頂了。
 還是另外一種情況:先創建了ActivityC,等到ActivityC finish掉之后,再開始創建ActivityB,等到ActivityB finish掉之后,再創建ActivityA呢?我們先打一波log看看:
通過log我們發現,startActivities的邏輯是我們的方式二,是單個Activity創建的,創建完成之后,等到Activity finish之后再創建剩余的Activity;并不是我們想象的一口氣創建統統壓入棧中的。
應用
說了這么多,你會不會感覺這個玩意沒什么卵用,因為這樣的需求我遇見的不多。的確,這個方法我以前是不知道的,也從來沒用過,但是最近遇到了這樣的問題,先截取一下開源中國說明一下:
 
 這個程序的主要問題在哪里呢?他點擊了廣告詳情進入目標頁面之后,然后點擊返回,并沒有像我們想象的一樣直接返回主界面,而是整個程序都退出了,然后再延遲進入主界面的,這樣的操作給人感覺不是很好的(我不否認開源中國這個app寫得很好,我也學習了不少好東西),因為我們項目中也出現了這個問題,流程圖大概是這樣的:
 
每家的app邏輯都不太一樣,我們這樣是首頁出現廣告頁面(與開源中國OSC中一樣的顯示),然后你點擊進去可以買東西,買了直接進入主界面MainActivity。當初我們的做法比較辣雞,偽代碼如下:
# ProductDetailActivity 中 # 返回按鈕和后退按鈕共用同一個方法 public void onBackPress() {if(isFromSplashPage) { //如果是從來Splash頁面來的,那么這里就需要返回到主界面MainActivity.start(this);finish();}else { //其他頁面可以進入產品詳情頁面,此時直接退出頁面即可finish(); }這樣的做法不是不可以,但是意識到startActiitives的作用之后,那就不用傳入isFromSplashPage參數了,直接這樣就可以:
# SplashActivity 頁面 var intent_main = Intent(this, MainActivity::class.java) var intent_product = Intent(this, ProductDetailActivity::class.java) startActivities(arrayOf(intent_main, intent_product))這還不是重點,重點是發現了我發現了我們的產品推送時,也可以使用這樣的邏輯:
 
 如果你登錄成功了,那么我直接可以讓你看推送詳情頁面,否則直接讓你登錄,偽代碼可以如下:
好了,也算自己的一個總結吧,下次遇到這種問題時,就知道該怎么寫了。
總結
以上是生活随笔為你收集整理的startActivitystartActivities有什么不同?的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: IDrawingDoc Interfac
- 下一篇: Android Studio之Activ
