如何将数据返回到被Android破坏的活动

如何将数据返回到被Android破坏的活动,android,android-asynctask,background-service,Android,Android Asynctask,Background Service,标题不好,请阅读下面的内容以更好地理解我的问题 我有一个Android应用程序,它的一个任务很耗时,通常需要2-5分钟才能完成。。。此任务由一个后台服务完成,该服务引用starter活动 99%的用户不想一直等待加载条,只需打开另一个应用程序或类似的东西。。。什么可能导致android销毁所引用的活动 忽略这个故事的背景泄漏。。。我的问题是: 当服务完成其任务时,它将尝试调用一个方法将值返回到父活动,但由于它已被销毁,现在我无法执行此操作 因此,当用户重新打开应用程序时,该活动的最后一个已知状态

标题不好,请阅读下面的内容以更好地理解我的问题

我有一个Android应用程序,它的一个任务很耗时,通常需要2-5分钟才能完成。。。此任务由一个后台服务完成,该服务引用starter活动

99%的用户不想一直等待加载条,只需打开另一个应用程序或类似的东西。。。什么可能导致android
销毁所引用的活动

忽略这个故事的背景泄漏。。。我的问题是:

当服务完成其任务时,它将尝试调用一个方法将值返回到父活动,但由于它已被销毁,现在我无法执行此操作

因此,当用户重新打开应用程序时,该活动的最后一个已知状态是“正在加载”,因此它将永远保持加载。。。(或重试以重新运行任务,这将导致另外5分钟的等待,依此类推……)

我怎样才能避免这种情况

================更新=================

在得到一个很好的答案,可能会解决像我这样的大多数问题后,我决定添加更多的信息来澄清我的问题

耗时的后台服务不是流程密集型的,实际上它花费如此长的时间是因为它正在使用服务验证一些用户“凭证”(当我说一些时,实际上不止一个)

因此,我无法存储结果并相信它在下次运行时有效


我知道该协议需要改进,但需要进行更大的架构更改,因此我想知道是否有人知道如何根据其实际需求处理该协议

是否需要在每次活动开始时运行后台任务

通常,如果您的活动需要这些值才能工作,并且计算或获取这些值需要很长时间,那么您应该在后台服务完成这些值后存储它们

基本上,您正在为数据创建缓存。因此,当活动开始时,它会检查缓存中的数据。如果它找到了数据,那么它会立即加载数据。如果找不到数据,则运行后台任务(通常是初始运行)

数据存储在缓存中的时间戳也很常见,因此,如果时间间隔太长,您可以:

  • 运行后台任务时显示过期数据。后台任务完成并将新数据存储到缓存,然后通知活动有新数据。活动将使用新数据进行更新

  • 不要显示过时的数据,而是擦除旧数据的缓存并运行后台任务

基本上,此解决方案只是让您的服务将计算出的值存储到存储位置,无论是数据库、共享引用、文件等


您不需要让服务返回值到某个活动,因为无法保证该活动仍然存在。相反,该服务只通知活动它向存储位置添加了新更新的数据,因此如果该活动仍然存在,它将毫无问题地进行更新。如果活动已经被终止,那么它将在再次启动时获取数据

你的方法很好,但可能不是我的答案。。。请阅读更新的基本验证绝对不能与我给出的答案一起使用。至少,不是在客户端。如果它是反向的,并且您在服务器端使用了答案,在服务器端缓存了验证的结果,这将把时间缩短到几乎瞬间。服务器只需要快速检查用户的ID,看看它以前是否经过验证,而不是每次都进行验证。这样,对其有效性的信任是基于您自己的服务器而不是用户的设备。遗憾的是,我不确定您是否可以进行这样的更改,因为不知道您可以对服务器进行哪些更改。