日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

startActivitystartActivities有什么不同?

發(fā)布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 startActivitystartActivities有什么不同? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題

平時用startActivity用習慣了,當別人問你startActivities是什么意思時,你會不假思索的說,可能是同時啟動多個activity吧,這簡直就是一道送命題啊,驗證之后才發(fā)現(xiàn)不是想象中那么簡單。

準備三個ActivityA,ActivityB,ActivityC:

準備代碼:

fun multiIntent(view : View) {val intent_1 = Intent(this,IntentActivityA::class.java)val intent_2 = Intent(this,IntentActivityB::class.java)val intent_3 = Intent(this,IntentActivityC::class.java)startActivities(arrayOf(intent_1,intent_2,intent_3))}

結(jié)果展示為:

可以看到,先展示是ActivityC,然后是ActivityB,最后是ActivityA,那么情況是不是這樣的:我startActivities時,ActivityA、ActivityB和ActivityC都被創(chuàng)建了,只是依次壓入棧底了,我finish掉ActivityC,清除了棧頂,然后ActivityB就可見了,清除ActivityB之后,ActivityA就到棧頂了。
還是另外一種情況:先創(chuàng)建了ActivityC,等到ActivityC finish掉之后,再開始創(chuàng)建ActivityB,等到ActivityB finish掉之后,再創(chuàng)建ActivityA呢?我們先打一波log看看:

IntentActivity C onCreateIntentActivity B onCreateIntentActivity C onDestroyIntentActivity A onCreateIntentActivity B onDestroyIntentActivity A onDestroy

通過log我們發(fā)現(xiàn),startActivities的邏輯是我們的方式二,是單個Activity創(chuàng)建的,創(chuàng)建完成之后,等到Activity finish之后再創(chuàng)建剩余的Activity;并不是我們想象的一口氣創(chuàng)建統(tǒng)統(tǒng)壓入棧中的。

應(yīng)用

說了這么多,你會不會感覺這個玩意沒什么卵用,因為這樣的需求我遇見的不多。的確,這個方法我以前是不知道的,也從來沒用過,但是最近遇到了這樣的問題,先截取一下開源中國說明一下:

這個程序的主要問題在哪里呢?他點擊了廣告詳情進入目標頁面之后,然后點擊返回,并沒有像我們想象的一樣直接返回主界面,而是整個程序都退出了,然后再延遲進入主界面的,這樣的操作給人感覺不是很好的(我不否認開源中國這個app寫得很好,我也學習了不少好東西),因為我們項目中也出現(xiàn)了這個問題,流程圖大概是這樣的:

每家的app邏輯都不太一樣,我們這樣是首頁出現(xiàn)廣告頁面(與開源中國OSC中一樣的顯示),然后你點擊進去可以買東西,買了直接進入主界面MainActivity。當初我們的做法比較辣雞,偽代碼如下:

# ProductDetailActivity 中 # 返回按鈕和后退按鈕共用同一個方法 public void onBackPress() {if(isFromSplashPage) { //如果是從來Splash頁面來的,那么這里就需要返回到主界面MainActivity.start(this);finish();}else { //其他頁面可以進入產(chǎn)品詳情頁面,此時直接退出頁面即可finish(); }

這樣的做法不是不可以,但是意識到startActiitives的作用之后,那就不用傳入isFromSplashPage參數(shù)了,直接這樣就可以:

# SplashActivity 頁面 var intent_main = Intent(this, MainActivity::class.java) var intent_product = Intent(this, ProductDetailActivity::class.java) startActivities(arrayOf(intent_main, intent_product))

這還不是重點,重點是發(fā)現(xiàn)了我發(fā)現(xiàn)了我們的產(chǎn)品推送時,也可以使用這樣的邏輯:

如果你登錄成功了,那么我直接可以讓你看推送詳情頁面,否則直接讓你登錄,偽代碼可以如下:

// PushUtils: if(userHasLogin) {var intent_detail = Intent(this, PushDetailActivity::class.java)var intent_main = Intent(this,MainActivity::class.java)startActivitied(arrayOf(intent_detail, intent_main)) }else {startActivity(Intent(this,LoginActivity::class.java)) }//LoginActivity if(LoginSuccess) {var intent_detail = Intent(this, PushDetailActivity::class.java)var intent_main = Intent(this,MainActivity::class.java)startActivitied(arrayOf(intent_detail, intent_main)) }else{var intent_main = Intent(this,MainActivity::class.java)startActivity(intent_main)finish() }

好了,也算自己的一個總結(jié)吧,下次遇到這種問題時,就知道該怎么寫了。

總結(jié)

以上是生活随笔為你收集整理的startActivitystartActivities有什么不同?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。