今天在編程的時(shí)候,遇到這樣的情況,一個(gè)Activity A跳轉(zhuǎn)到另一個(gè)Activity B(Activity A并沒(méi)有被finish掉),B處理完后,將一些值通過(guò)Intent重新傳回給Activity A。在這里筆者并沒(méi)有使用startActivityforResult函數(shù),而是簡(jiǎn)單地使用startActivity函數(shù)。并且Activity A在Androidmanifest.xml文件中將啟動(dòng)模式設(shè)置為“singleTask”。但是,再次回到Activity A時(shí)使用Intent獲取B傳過(guò)來(lái)的值時(shí)無(wú)法獲取。不知道是什么原因。因?yàn)樵俅位氐紸時(shí),不會(huì)執(zhí)行onCreate()函數(shù),所有把從Intent中獲取值的過(guò)程放到了onResume()函數(shù)中。http://www.hbhlny.cn/writeart3.aspx 經(jīng)過(guò)網(wǎng)上的查詢,在A中添加了onnewintent()函數(shù),問(wèn)題得到解決:
下面具體來(lái)分析一下邏輯。 第一次創(chuàng)建Activity A時(shí),執(zhí)行的邏輯順序是:onCreate() --->onStart()--->onResume()。 而如果使用“singleTask”模式第二次啟動(dòng)Activity A,且A處于任務(wù)棧的頂端,則執(zhí)行的邏輯順序是: onNewIntent() ---> onRestart() --->onStart() ---> onResume()。 通過(guò)Intent來(lái)再次啟動(dòng)A時(shí),由于系統(tǒng)已經(jīng)存在一個(gè)實(shí)例,喜用就會(huì)將請(qǐng)求發(fā)送到這個(gè)實(shí)例上。此時(shí),系統(tǒng)不會(huì)再調(diào)用通常情況下處理請(qǐng)求數(shù)據(jù)的onCreate()方法,而是調(diào)用onNewIntent()方法。 所以,如果遇到了和我上面類似的問(wèn)題,一個(gè)辦法就是在onCreate()函數(shù)和onNewIntent方法中嗲用相同的處理數(shù)據(jù)的方法:
當(dāng)然,你也可以把二者相同的處理放到onResume()函數(shù)中,反正后面都要調(diào)用這個(gè)函數(shù),避免同樣的代碼寫(xiě)2次。 |
|
來(lái)自: 風(fēng)雪夜歸人_95 > 《android》