繁体   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