2012-07-03 115 views
1

我想運行一個JavaScript代碼片斷,不斷輪詢服務器的更新。從最終用戶的角度來看,實現這一目標的最佳方式是對應用程序性能的影響最小。在手機上實現長時間運行的後臺任務

我嘗試在單獨的iframe中產卵,但結果表現非常糟糕。

我目前正在研究android,所以如果解決方案涉及到編寫一個phonegap插件來輪詢服務器而不是javascript,那麼現在應該沒問題。在輪詢服務器之後,我需要更新本地存儲中的數據。

回答

1

我已經在IOS中實現了這一點。 phonegap的問題在於你無法創建運行JavaScript的計時器任務,因爲如果你的.html頁面發生變化,任務將被終止。

除非你只有一個.html,而且你正在動態改變身體部分。如果是這種情況,請在javascript中查找setInterval。

如果情況並非如此,那麼在JavaScript上實現一些東西並不是解決方案,在IOS中我已經實現了一個用於運行異步Web服務調用的定製插件。你可以做類似的事情,編寫一個運行AsyncTask doInBackground()的插件,然後在javascript中回傳結果。有很多關於如何在phonegap中創建自定義插件的教程。希望它有幫助

+0

確認?討論? – 10s

2

如果您打算只在應用程序正在使用時進行輪詢,setInterval()運行得很好。我的應用程序使用jQuery Mobile,默認情況下只更新DOM,而不是重新加載整個頁面,這樣我的setInterval()一旦開始運行就會一直運行。

Android已經有Background services的支持,您可以使用它進行長時間連續運行的任務。我已用上述組合使用

一種解決方案:

的應用程序正在運行時
  • 我使用setInterval()定期檢查更新。
  • 背景檢查應用程序是否正在運行或不啓動更新檢查
  • 如果應用程序沒有再運行我用的是後臺服務代碼只是爲了檢查是否有在服務器上或任何更新不
  • 如果有前更新然後我把一個系統托盤通知通知用戶,有更新等待他
  • 只要他啓動應用程序,我打電話的服務來獲取更新。

這樣我的主要邏輯仍然是在Javascript方面,我不需要在Javascript和本地再次編寫相同的邏輯。

如果更新不是很頻繁,那麼你應該考慮使用PushNotification

相關問題