溫馨提示×

startactivityforresult的回調(diào)機制解析

小樊
82
2024-09-02 19:51:53
欄目: 編程語言

startActivityForResult 是 Android 中用于從一個 Activity 啟動另一個 Activity,并在結(jié)果返回時獲取結(jié)果數(shù)據(jù)的方法。這種回調(diào)機制基于 Android 的 Activity 生命周期和啟動模式實現(xiàn)。

以下是 startActivityForResult 的回調(diào)機制解析:

  1. 在啟動新 Activity 之前,當(dāng)前 Activity(我們稱之為 A)會調(diào)用 startActivityForResult 方法。這個方法接收兩個參數(shù):一個 Intent 對象,用于描述要啟動的新 Activity(我們稱之為 B);一個請求碼(requestCode),用于標(biāo)識這次請求。

  2. 系統(tǒng)會根據(jù) Intent 創(chuàng)建新 Activity B,并將其添加到任務(wù)棧中。此時,Activity A 仍然處于暫停狀態(tài)。

  3. 在新 Activity B 中,可以通過調(diào)用 setResult 方法設(shè)置結(jié)果數(shù)據(jù)。這個方法接收兩個參數(shù):一個結(jié)果碼(resultCode),表示操作的成功與否;一個 Intent 對象,用于傳遞結(jié)果數(shù)據(jù)。

  4. 當(dāng)新 Activity B 完成操作并準(zhǔn)備返回結(jié)果時,需要調(diào)用 finish 方法來關(guān)閉自身。這將導(dǎo)致 Activity B 從任務(wù)棧中移除,并回到上一個 Activity A。

  5. 在 Activity A 中,onActivityResult 方法會被調(diào)用。這個方法接收三個參數(shù):請求碼(requestCode)、結(jié)果碼(resultCode)和包含結(jié)果數(shù)據(jù)的 Intent 對象。通過這個方法,Activity A 可以獲取 Activity B 的結(jié)果數(shù)據(jù),并根據(jù)需要進(jìn)行相應(yīng)的處理。

  6. 如果 Activity A 被銷毀或重新創(chuàng)建(例如,由于配置更改或內(nèi)存不足),系統(tǒng)會保留請求碼和結(jié)果數(shù)據(jù),以便在 Activity A 重新創(chuàng)建后能夠正確地調(diào)用 onActivityResult 方法。

總結(jié)一下,startActivityForResult 的回調(diào)機制依賴于 Android 的 Activity 生命周期和任務(wù)棧管理。通過在啟動新 Activity 時傳遞請求碼和結(jié)果數(shù)據(jù),系統(tǒng)可以確保在適當(dāng)?shù)臅r機調(diào)用 onActivityResult 方法,并將結(jié)果數(shù)據(jù)傳遞給調(diào)用者。這種機制使得在多個 Activity 之間傳遞數(shù)據(jù)和處理操作結(jié)果變得簡單高效。

0