问题:从长时间运行的任务向活动报告进度/完成的最佳做法是什么?当活动在后台/方向发生变化时,进度/完成报告发生时该怎么办?
现实生活中的例子: 活动进行网络调用从服务器获取数据(这可能需要10秒以上)。 此网络呼叫完成后,应通知活动,并且活动应显示网络呼叫已完成。
只要应用程序保持打开状态,这很容易实现。我的问题是,如果在应用程序处于后台时网络调用已完成,该怎么办(活动将错过任何回调)。
我一直在研究以下方法,但我无法决定该怎么做:
我该如何解决这个问题?
答案 0 :(得分:0)
我使用HeadlessFragments
作为其调用来解决此问题。 This博客文章详细解释了如何实现它,以及您提到的问题由它处理。
编辑: 对于评论中的问题:
对于您的具体问题,当Activity
在后台时,回调会丢失,答案是否定的。处于"背景"意味着Activity
仍然存在。在我发布的链接中,当callback
与Activity
分离时Activity
,Activity
,destroyed
,Activity
。因此,如果您的destroyed
位于后台,而不是callback
,那么它仍会获得callback
并执行您在paused
中执行的任何操作。虽然Android可以杀死Activity
的活动,但在这种情况下,您的destroyed
将为callback
,而您却无法获得SQLite
。在这种情况下,您可以将从服务器获得的数据保存在持久存储中,例如Activity
,并防止在创建Activity
时进行另一次网络呼叫或进行网络呼叫,这将确保只要created
为Fragment
,您就可以显示数据(当然,通话时会通过)。
使用AsyncTask
专门用于处理您在问题中提到的配置更改。正在运行的任务仍由Fragment
完成,而不是由Fragment
完成。 jQuery
仅包含对象的引用。因此,我认为它不是最佳实践"。