2014-09-26 51 views
2

谷歌建議接收GCM推送通知時延遲syncAdapter的執行:如何延遲syncAdapter的執行與requestSync

注:如果您使用GCM通過廣播觸發您的同步適配器 所有設備安裝在您的應用程序,請記住,他們幾乎在同一時間收到您的消息 。這種情況可能會導致同步適配器的多個實例同時運行 ,導致服務器和網絡過載。要避免發生向所有設備廣播的 這種情況,您應該考慮將同步適配器的起始日期推遲爲每個設備唯一的一段時間。 (source

但是,我無法找到一個方法來發出一個延遲參數(API)一SyncRequest。我能想到的唯一另一種(非常冒險的)選擇是啓動一個服務(它必須保持喚醒鎖定,因爲它是一個推送通知的廣播接收器),它會休眠幾秒鐘,發出一個SyncRequest,並釋放喚醒鎖。任何更好的想法?

回答

2

您可以簡單地使用處理程序。

static final long c_delayMax = 120 * 1000; 
static Random r = new Random(); 

public static void delayedNotification(Bundle data) { 
    Handler h = new Handler(); 
    long delay = r.nextLong() % c_delayMax; 
    h.postDelayed(new Runnable() { 
     @Override 
     public void run() { makeSyncRequest(data); } 
    }, delay); 
}