我的Android 4+应用程序连接到一个自定义的Web服务,用于每隔几分钟同步数据。为了确保在线数据始终是最新的,我希望在应用程序关闭/切换到后台时触发同步。
在iOS上,这很容易:
- 监听AppDelegate中的
applicationDidEnterBackground:
- 使用
beginBackgroundTaskWithName:
启动长时间运行的后台任务,并避免在任务仍在运行时被暂停
如何在Android上实现?
第一个问题是,没有类似于applicationDidEnterBackground:
的东西。到目前为止,我找到的所有解决方案都建议使用主Activity的onPause()
方法。然而,每当主Activity
暂停时,包括在应用程序内启动另一个Activity
时,都会调用此方法。对于ActivityLifecycleCallbacks
接口的onActivityPaused()
方法也是如此。
那么,如何检测应用程序(而不仅仅是Activity
)是关闭还是切换到后台?
第二个问题是,我没有找到关于如何运行后台任务的任何信息。所有的解决方案都指向简单地启动一个AsyncTask
,但这真的是正确的解决方案吗?
AsyncTask
将启动一个新任务,但当应用程序关闭/不活动时,这个任务是否也会运行呢?我需要做什么来防止应用程序和任务在几秒钟后被暂停?如何确保任务能够完成,然后再完全暂停应用程序?