2015-10-15 80 views
2

我的應用程序要求我應該使用同步適配器

登錄。

註冊。

1分鐘週期性間隔從服務器獲取數據並更新UI。

沒有本地數據庫。

用於登錄,註冊,我將使用正常的HTTP調用,但是在一個分鐘時間我想用SyncAdapter,定期要求

我應該使用SyncAdapter這?,連我都沒有本地DB存儲器。

是否有可能從SyncAdapter更新UI?

我已經通過了下文鏈接 How do I use the Android SyncAdapter?

Sync data between Android App and webserver

Android SyncAdapter use case

Sync data between Android App and webserver

回答

1

同步適配器設計爲在截止時間運行,以保持本地和服務器之間的數據電流。不是經常的,當然不是每分鐘。

你應該實現一個Timer或Handler來控制它。

this answer類似的東西。

private int mInterval = 60000; // 60 seconds 
private Handler mHandler; 

@Override 
protected void onCreate(Bundle bundle) { 
    ... 
    mHandler = new Handler(); 
    startRepeatingTask(); 
} 

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 
     downloadChangesFromServer(); 
     mHandler.postDelayed(mStatusChecker, mInterval); 
    } 
}; 

void startRepeatingTask() { 
    mStatusChecker.run(); 
} 

void stopRepeatingTask() { 
    mHandler.removeCallbacks(mStatusChecker); 
} 
+0

我認爲GCMnetworkManager將是一個更好的用例? – Naga

+1

你不需要像例如簡單的案例這麼大的東西。 GCM主要用於服務器發送推送消息。如果您每分鐘輪詢一次,Handler是您最輕量級的實現。 – Knossos

2

作爲官方文件說

在您的應用程序同步適配器組件封裝爲設備和服務器之間傳輸數據的 任務的代碼。根據您在應用中提供的 調度和觸發器,同步適配器 框架將運行同步適配器組件中的代碼。

我建議你在需要定期更新時使用SyncAdapter,即使用戶不使用該應用。 SyncAdapter的主要優勢在於,即使您不使用該應用程序,它也可以通過Android系統進行切換。所以當用戶進入應用程序時,他總是有實際的數據。如果您沒有本地數據庫,只需要定期更新,請使用處理程序。

int updatePeriod = 60*1000;// one minute in milliseconds 
    mHandler = new Handler(); 
    mRunnable = new Runnable(){ 
      @Override 
      public void run() { 
       //update request here 
       mHandler.postDelayed(mRunnable, updatePeriod); 
      } 
      }; 
    mRunnable.run(); // missing 

此代碼每分鐘運行一次run()。將更新邏輯添加到運行方法。此外,如果您每分鐘都要請求服務器數據,則只會浪費設備電池。如果你想在網絡工作的更多信息檢查這個視頻https://www.youtube.com/watch?v=l5mE3Tpjejs