簡體   English   中英

如果未調用活動的 onDestroy() 方法,如何更新遠程數據庫中的狀態?

[英]How to update status in remote database if the activity's onDestroy() method is not called?

目標是在活動被破壞后更新遠程數據庫中的狀態。 困難在於,如果系統終止進程,則可以跳過活動的 onDestroy() 方法調用。 onStop() 和 onPause() 方法沒有意義,因為它們不能確保活動完成。 其他活動中的 ActivityResult 也不起作用,因為該應用程序可能會被終止。 Service 可能是解決方案,但恐怕它會隨着活動一起被殺死(例如,如果應用程序被強制停止,則不會調用 Service 中的 onTaskRemoved())。 什么可以解決問題?

到目前為止,我想出的最佳解決方案是將 Firebase Cloud Functions 與 Google Cloud Functions 結合使用。

長話短說

由於要求保證方法不早於活動的onDestroy()回調運行,一個有吸引力的解決方案是 Android Jetpack 的WorkManager for

WorkManager 是一個 API,它可以輕松安排可靠的異步任務,即使應用程序退出或設備重新啟動,這些任務也有望運行。

但是,讓我們想象一下手機已經炸毀了。 然后任務將永遠不會運行。 如果不是要更改遠程數據庫狀態,尤其是在多個用戶之間共享狀態時,那沒關系。

因此,使用遠程數據庫的最安全方法是將遠程功能安排為備份解決方案或基於此解決方案邏輯。 遠程函數很可能是用你的程序以外的其他語言編寫的,但沒有什么可害怕的,完全值得做。

這篇文章幫助我如何安排 Cloud 函數在未來使用 Cloud Tasks 運行(構建 Firestore 文檔 TTL) 如果遠程數據庫是 Firebase(Firestore 或 Realtime),則可以編寫 Cloud Functions,這將在數據庫更改時觸發並安排 Google Cloud Tasks。 后者可以運行 HTTP 觸發的 Firebase Cloud Function 並執行任何需要的操作,例如更新數據庫值,或檢查某些條件並重新安排 Google Cloud 任務。 所以,即使手機壞了,預定的任務也會被執行(同樣,如果服務器不會出現故障......)。 這些函數可以用 JavaScript 或 TypeScript 編寫,非常容易掌握。

暫無
暫無

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

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