2012-07-16 77 views
1

我正在使用AbstractThreadedSyncAdapter將Android手機中的某些數據與服​​務器同步。當用戶使用手機的應用程序登錄時,我會執行第一次同步,以便用戶在開始使用我的應用程序之前將手機中的所有數據準備好。我用eclipse的模擬器測試了它,它工作正常,但是當我在手機上測試它時,onPerformSync函數花費的時間太長(比如一分鐘或更多)。AbstractThreadedSyncAdapter-> onPerformSync需要太多時間才能調用

這是我在認證活動中使用的代碼:

 Bundle params = new Bundle(); 
     params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false); 
     params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false); 
     params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false); 
     ContentResolver.addPeriodicSync(account, "com.pfc.authority", params, 30); 
     ContentResolver.setSyncAutomatically(account, "com.pfc.authority", true); 

     ContentResolver.requestSync(account,"com.pfc.authority",params); 

我AbstractThreadedSyncAdapter的構造函數被調用非常快,但後來我的申請仍然在等待同步是完整的,就像我說的onPerformSync函數需要花費太多時間才能啓動,我不知道爲什麼我的電話需要很長的時間來調用它。

這是日誌(爲我的應用程序過濾)。我把Log.d在構造和功能onPerformSyn:

11:47:49 SweetSyncAdapter: constructor 
11:48:01 SweetSyncAdapter: constructor 
11:48:36 SweetSyncAdapter: onPerformSync 

我看了完整的日誌(不過濾的話),並在執行我的應用程序沒有任何錯誤或警告,但我看到,那就是另一syncrhonization繼續(音樂,日曆等)。這可能是問題嗎?

我測試了兩個不同的ROM(2.3.6 JVU和現在的ICS),它是一樣的。有人知道爲什麼會發生這種情況嗎?

PD:現在我看到了與註銷相同的情況(我在用戶註銷時執行同步),並且電話已經等待調用onPerformSync 5分鐘)。

回答

1

我創建了一個帳戶後,我請求與以下行同步。

Bundle bundle = new Bundle(); 
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true); 
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true); 
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true); 
ContentResolver.requestSync(account, authority, bundle); 

我認爲SYNC_EXTRAS_FORCE會幫助你