簡體   English   中英

按下后退按鈕時使用 setResult() 未在 onPause() 中設置結果

[英]result not set in onPause() using setResult() when pressing the Back button

我有 2 個活動 AAA 和 BBB。 我使用startActivityForResult(Intent, int)從 AAA 調用 BBB。 完成 BBB 后,我按返回按鈕返回 AAA。 在 BBB 中,我覆蓋 onPause() 並使用setResult(RESULT_OK)設置結果。

在 AAA 中,我在onActivityResult(int requestCode, int resultCode, Intent data)中檢查我的結果,並且我一直收到 RESULT_CANCELLED。

在 google/stackoverflow 上花了一些時間后,我發現如果我重寫onBackPressed()並在其中設置結果,那么它絕對可以正常工作。

我不明白的是,為什么沒有在 onPause() 中設置結果,而實際上 onPause() 在 onBackPressed() 之后被調用。 我已經瀏覽了 Dev 文檔中的活動流程,我非常清楚那里提到的內容。

任何人都對這種行為有任何想法或者可以更好地解釋它?

您應該查看onActivityResult參考。 http://developer.android.com/reference/android/app/Activity.html#onActivityResult%28int,%20int,%20android.content.Intent%29

Called when an activity you launched exits, giving you the requestCode you started it with, the resultCode it returned, and any additional data from it. The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation.

You will receive this call immediately before onResume() when your activity is re-starting.

finish()中調用setResult 因為當新活動從BBB開始時,可以調用onPause()

我認為這里的問題可能是在您已經返回到上一個活動之后可能會調用 onPaused。 我在其他測試中看到了類似的行為。 嘗試添加一些 Log.d 打印輸出以確認 onPause 調用與 onActivityResult 調用的順序。

最有可能的情況必須是生命周期方法。

當您在 BBB 活動中按返回鍵時,首先調用 onPause() 以便您在 onPause() 中設置一些內容,然后此方法后跟 onStop() 並進一步跟隨 OnDestroy() 因為活動正在完成。 所以現在如果你在 onPause() 中設置了一些東西,它正在被設置但是因為它后面是 onDestroy() 操作系統可能會在這個活動完成時強行取消你的任務。

此外,如果您在 onPause() 中設置了某些內容,那么如果您的應用程序失去焦點或被最小化,則也會調用 onPause() 可能是您的應用程序可能會失去穩定性。 所以建議不要使用 onPause(),最好使用 onKeyUp() 或 onBackPressed() 到 go。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM