startActivityForResult
是一個用于從一個 Activity 啟動另一個 Activity,并在操作完成后返回結(jié)果的方法
Android 4.0(API 級別 14)及更低版本:
在這些版本中,startActivityForResult
的行為與目標(biāo) Activity 的主題和啟動模式無關(guān)。當(dāng)目標(biāo) Activity 完成操作并調(diào)用 setResult
后,它會將結(jié)果返回給源 Activity,然后源 Activity 的 onActivityResult
方法會被調(diào)用。
Android 4.1(API 級別 16)及更高版本:
從這個版本開始,startActivityForResult
的行為發(fā)生了變化。如果目標(biāo) Activity 使用 android:launchMode="singleInstance"
或 android:theme="@android:style/Theme.NoDisplay"
,那么在某些情況下,系統(tǒng)可能會直接調(diào)用源 Activity 的 onActivityResult
方法,而不是等待目標(biāo) Activity 完成操作。這可能導(dǎo)致在目標(biāo) Activity 中設(shè)置的結(jié)果數(shù)據(jù)丟失。
為了解決這個問題,你可以采取以下措施:
android:launchMode="singleInstance"
或 android:theme="@android:style/Theme.NoDisplay"
。onCreate
方法中檢查 getIntent().getExtras()
是否為空。如果為空,說明可能存在上述問題,你需要在 onNewIntent
方法中處理傳遞的數(shù)據(jù)。總之,startActivityForResult
在不同 Android 版本中的主要差異在于,從 Android 4.1(API 級別 16)開始,目標(biāo) Activity 的主題和啟動模式可能會影響返回結(jié)果的行為。為了確保兼容性,請注意檢查目標(biāo) Activity 的屬性,并在必要時處理可能的問題。