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