Android:onActivityResult()注意點(diǎn)

前言:網(wǎng)上說,使用startActivityForResult()進(jìn)行數(shù)值回傳時(shí),onActivityResult()執(zhí)行順序在不同啟動(dòng)模式下有所差別。本人就對(duì)此進(jìn)行了驗(yàn)證。
一.頁面跳轉(zhuǎn)使用的跳轉(zhuǎn)方法
眾所周知,Activity的跳轉(zhuǎn)可以分為兩類,分別是使用 startActivity()和startActivityForResult(),前者通常用于頁面間正常的跳轉(zhuǎn),后者一般用于頁面間傳值(通過Intent)。onActivityResult()是在使用了startActivityForResult()才會(huì)調(diào)用。
二.onActivityResult()方法的使用(這里用MainActivity跳轉(zhuǎn)到SecondActivity,demo是點(diǎn)擊按鈕btn跳轉(zhuǎn))

MainActivity跳轉(zhuǎn)的代碼.png
MainActivity回傳數(shù)值調(diào)用的代碼.png
SecondActivity.png

三.結(jié)果(以下說的launchMode是指SecondActivity清單文件的配置)
1.在android5.0及以上系統(tǒng),onActivityResult()都是在SecondActivity按返回鍵或調(diào)用finish()以后才執(zhí)行,下圖是相關(guān)生命周期執(zhí)行情況(四種launchMode都是這樣的順序);


圖1:MainActivity跳轉(zhuǎn)到SecondActivity然后按返回鍵.png

2.但是,在5.0以下系統(tǒng),
當(dāng)launchMode設(shè)置為standard(默認(rèn)的)和singletop模式時(shí),同樣操作執(zhí)行的順序跟圖1相同。
當(dāng)launchMode設(shè)置為singletask和singleinstance模式時(shí),其執(zhí)行順序會(huì)跟圖1不同(如下圖2)。

MainActivity跳轉(zhuǎn)到SecondActivity然后按返回鍵.png

四.總結(jié)
1.兩個(gè)頁面跳轉(zhuǎn)數(shù)值回傳時(shí)(即使用startActivityForResult())時(shí),除特殊情況下,5.0以下系統(tǒng)目標(biāo)Avcivity的啟動(dòng)模式(launchMode)影響onActivityResult()的執(zhí)行順序,源Avcivity無影響(本案例中SecondActivity是目標(biāo)Avcivity,MainActivity是源Avcivity)。
2.在android5.0及以上系統(tǒng)時(shí),onActivityResult()不受清單文件中啟動(dòng)模式影響,都是在SecondActivity按返回鍵或finish()以后執(zhí)行。(如圖1,有特殊情況,稍后補(bǔ)充)
3.在android5.0以下系統(tǒng)時(shí),如果啟動(dòng)模式是standard(默認(rèn)的)和singletop,onActivityResult()是在SecondActivity按返回鍵或finish()以后執(zhí)行(如圖1)。當(dāng)啟動(dòng)模式是singletask和singleinstance時(shí),onActivityResult()是在執(zhí)行startActivityForResult()時(shí)立即執(zhí)行(如圖2)。
4.特殊情況:在android5.0及以上系統(tǒng),當(dāng)設(shè)置MainActivity中跳轉(zhuǎn)使用的intent的flag為FLAG_ACTIVITY_NEW_TASK時(shí),生命周期執(zhí)行情況如圖2.


MainActivity設(shè)置flags跳轉(zhuǎn)的代碼.png

五.原因
原因參考:https://stackoverflow.com/questions/8960072/onactivityresult-with-launchmode-singletask

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概述 Activity 作為與用戶交互的一個(gè)窗口,是使用非常頻繁的一個(gè)基本組件。Android系統(tǒng)是通過Act...
    三也視界閱讀 2,406評(píng)論 3 11
  • Android 的活動(dòng)是可以包含用戶界面的組件,主要用于與用戶進(jìn)行交互。 1 手動(dòng)創(chuàng)建活動(dòng) 手動(dòng)創(chuàng)建活動(dòng)可以加深對(duì)...
    deniro閱讀 3,806評(píng)論 0 10
  • 【Android Activity】 什么是 Activity? 四大組件之一,通常一個(gè)用戶交互界面對(duì)應(yīng)一個(gè) ac...
    Rtia閱讀 3,929評(píng)論 3 18
  • 小吳和周周是高三同學(xué)且同桌。他們經(jīng)常一塊吃飯或課余做一些其它的活動(dòng)。有一次,小吳病了,身體乏力并伴有高燒,當(dāng)快要去...
    順?biāo)优?/span>閱讀 332評(píng)論 0 0
  • 1.村小學(xué)的水泥地 我最早接觸籃球是在小學(xué)的時(shí)候。準(zhǔn)確的說,是在一節(jié)體育課上。 我上的小學(xué)在鄰村,走路十分鐘就到了...
    Ladpger閱讀 619評(píng)論 0 1

友情鏈接更多精彩內(nèi)容