startActivityForResult
是 Android 中用于從一個 Activity 啟動另一個 Activity,并在結果返回時獲取結果數據的方法。這種回調機制基于 Android 的 Activity 生命周期和啟動模式實現。
以下是 startActivityForResult
的回調機制解析:
在啟動新 Activity 之前,當前 Activity(我們稱之為 A)會調用 startActivityForResult
方法。這個方法接收兩個參數:一個 Intent 對象,用于描述要啟動的新 Activity(我們稱之為 B);一個請求碼(requestCode),用于標識這次請求。
系統會根據 Intent 創建新 Activity B,并將其添加到任務棧中。此時,Activity A 仍然處于暫停狀態。
在新 Activity B 中,可以通過調用 setResult
方法設置結果數據。這個方法接收兩個參數:一個結果碼(resultCode),表示操作的成功與否;一個 Intent 對象,用于傳遞結果數據。
當新 Activity B 完成操作并準備返回結果時,需要調用 finish
方法來關閉自身。這將導致 Activity B 從任務棧中移除,并回到上一個 Activity A。
在 Activity A 中,onActivityResult
方法會被調用。這個方法接收三個參數:請求碼(requestCode)、結果碼(resultCode)和包含結果數據的 Intent 對象。通過這個方法,Activity A 可以獲取 Activity B 的結果數據,并根據需要進行相應的處理。
如果 Activity A 被銷毀或重新創建(例如,由于配置更改或內存不足),系統會保留請求碼和結果數據,以便在 Activity A 重新創建后能夠正確地調用 onActivityResult
方法。
總結一下,startActivityForResult
的回調機制依賴于 Android 的 Activity 生命周期和任務棧管理。通過在啟動新 Activity 時傳遞請求碼和結果數據,系統可以確保在適當的時機調用 onActivityResult
方法,并將結果數據傳遞給調用者。這種機制使得在多個 Activity 之間傳遞數據和處理操作結果變得簡單高效。