2014-04-12 52 views
0

我正在嘗試構建一個應每隔幾秒運行一次的SyncAdapter來快速檢查特定數據。 我用下面的代碼來運行SyncAdapterAndroid SyncAdapter頻率

ContentResolver.setIsSyncable(account, CONTENT_AUTHORITY, 1);   
ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, true); 

,並同步進行trigerred correclty但是我注意到,它的通話只有每十分鐘。 基於Android培訓http://developer.android.com/training/sync-adapters/running-sync-adapter.html說:

當網絡連接可用,Android系統 發出了一個信息每隔幾秒鐘,以保持設備的TCP/IP連接 開放。此消息也會發送至每個 應用程序的ContentResolver。通過調用setSyncAutomatically(),只要ContentResolver收到消息,就可以運行同步適配器 。

我可用的網絡連接,但它只是3G連接,而不是WiFi - 這是長期等待的原因嗎? 如何讓我的適配器每10秒運行一次? 我已經嘗試過使用週期性同步

ContentResolver.addPeriodicSync(account, CONTENT_AUTHORITY, new Bundle(), 10); 

但它仍然每10分鐘運行一次。

+1

好吧,我已經確認同步頻率取決於連接類型 - 每隔幾秒WiFi,每隔10分鐘3G。 我相信這是期望的行爲,但是當使用該設備(例如瀏覽互聯網)時,間隔仍然是10分鐘。可以縮短這種情況嗎? – Marrbacca

回答

2

你是android SyncManager的受害者。考慮這種情況:您爲應用程序添加了每10分鐘同步,但是您的手機上已安裝了我的應用程序,並要求經理進行10分鐘的定期同步,我的應用程序比您的要求提前一秒執行了計劃要求:)我的應用程序的同步操作涉及大量數據的傳輸,因此使用可用互聯網連接的整個(或幾乎)帶寬。智能SyncManager將會看到,在前一個完成之前啓動另一個同步過程並不明智,因此它會等待過程結束,並且只有在事後纔會觸發同步。

+0

好的,所以我必須使用其他方法(可能是AlarmManager)來確保在需要時同步被激怒?我正在考慮使用SCREEN_OFF和SCREEN_ON意圖基於BroadcastReceiver設置AlarmManager的服務。這是否有意義,並有任何工作機會? – Marrbacca

+0

您可以立即開始同步的唯一方法是使用requestSync()方法。你可以編程一個警報,在定義的時間觸發這個方法,它應該工作,我認爲。並且,如果您認爲這是正確的,請接受答案。 – NiVeR

+0

糾正我,如果我錯了,但使用AlarmManager觸發同步是有點沒有意義,我可以直接在AlarmManager中使用同步代碼。 這也有缺點,即使在設備未使用時也運行同步,我擔心這對電池有太大的影響 – Marrbacca