【问题标题】:implementing long running background tasks in phonegap在 phonegap 中实现长时间运行的后台任务
【发布时间】:2012-07-03 07:25:05
【问题描述】:
我正在尝试运行一个 javascript 的 sn-p,它会不断轮询服务器以获取更新。从最终用户的角度来看,在对应用程序性能影响最小的情况下,最好的方法是什么?
我尝试在单独的 iframe 中生成它,但结果性能很差。
我目前正在研究 android,所以如果解决方案涉及编写 phonegap 插件来轮询服务器而不是 javascript,那么现在应该没问题。轮询服务器后,我需要更新本地存储中的数据。
【问题讨论】:
标签:
android
cordova
backgroundworker
【解决方案1】:
我已经在 IOS 中实现了这一点。 phonegap 的问题在于您无法创建运行 javascript 的计时器任务,因为如果您的 .html 页面发生更改,该任务将被终止。
除非您只有一个 .html 并且您正在动态更改正文部分。如果是这种情况,请在 javascript 中查找 setInterval。
如果不是这样,那么在 javascript 上实现某些东西不是解决方案,在 IOS 中,我实现了一个自定义插件来运行异步 Web 服务调用。您可以做类似的事情,编写一个运行 AsyncTask doInBackground() 的插件,然后在 javascript 中回发结果。有很多关于如何在 phonegap 中创建自定义插件的教程。希望对你有帮助
【解决方案2】:
如果您打算仅在应用程序正在使用时进行轮询,setInterval() 工作得相当好。我的应用程序使用的是 jQuery Mobile,默认情况下它只更新 DOM 而不是重新加载整个页面,这样我的setInterval() 会在启动后继续运行。
Android 已经支持Background services,您可以将其用于长时间连续运行的任务。
我使用上述组合的一个解决方案:
- 当应用程序运行时,我使用
setInterval() 定期检查更新。
- 在开始更新检查之前后台检查应用程序是否正在运行
- 如果应用程序没有运行,那么我使用后台服务代码只是为了检查服务器上是否有任何更新
- 如果有更新,我会在系统托盘通知中通知用户有更新等待他
- 他一启动应用程序,我就调用服务来获取更新。
这样我的主要逻辑仍然在 Javascript 端,我不需要再次在 Javascript 和本机中编写相同的逻辑。
如果更新不是很频繁,那么您应该考虑使用PushNotification