2016-01-22 21 views
4

我有一個安裝在Parse中的Android數據庫,我一直在試圖找到用最新的遠程更改來更新我的LocalStorage的最佳方法/實踐。Android:在後臺同步遠程數據庫的最流暢方式是什麼?

我不是要求代碼或語法,我只是尋找一組遵循的步驟,我確定我需要使用工作線程,因爲我不想阻止用戶界面,我很樂意爲用戶儘可能順利地進行轉換(他甚至不會意識到更新正在發生),我希望在應用程序處於前臺時發生轉換。我到目前爲止的想法:

  • 使用多線程(Loopers,Handlers,Thread)並在單獨的線程中更新每個表。
  • 嘗試限制請求以最大限度地減少CPU使用率並一次獲取表。
  • 使用加載程序,只是聽取更改。
  • 調用一個IntentService以通過表來獲取表。
  • 創建未綁定的服務,並在應用程序關閉後更新數據庫。
  • 不要在後臺更新數據庫,並等待用戶實際需要數據並檢索它。

我已經試過IntentService之一,它不順利,因爲我想:

public class DataService extends IntentService { 
    public DataService() { 
     super(DataService.class.getName()); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     String[] entities = { 
       "Img", 
       "Pack", 
       "Technology", 
       "Term", 
       "TermHierarchy", 
       "TermImplementation", 
       "TermTerm", 
       "UserTechnology", 
       "UserTerm", 
     }; 

     for (String entity : entities) { 
      updateLocalTable(entity); 
     } 
    } 

    private void updateLocalTable(String entity) { 
     ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(entity); 
     query.findInBackground(new FindCallback<ParseObject>() { 
      @Override 
      public void done(List<ParseObject> objects, ParseException e) { 
       if (e == null){ 
        ParseObject.pinAllInBackground(objects); 
       }else { 
        Log.e(TAG_, e.toString()); 
       } 
      } 
     }); 
    } 
} 

另外,我稱這是第一次連接發生變化(有Wi-Fi )。我是否應該在onCreate上調用它,或者創建一個Alarm來每隔一段時間更新一次,或者當Activity結束時更新一次?

我見過幾個貼子相關:

Update data in Background Periodically (Android)

Syncronizing Android client with remote SQL-server database, using web service

Send database data through socket connection

sync remote database (mysql) with sqlite database and vice versa

但他們都沒有很好的和詳細的解答,他們穿上」真的解決了這個問題。

我還會補充一點,Parse處理所有RESTful調用和JSON轉換,所以我不必擔心這一點。


編輯。

我剛剛發現,解釋了這些概念(並支持@gsgsgs提供的答案),在不到2分鐘的視頻:

https://www.youtube.com/watch?v=Expbi0lHLRE

回答

2

您可以嘗試SyncAdapter

您的應用中的同步適配器組件封裝了用於在設備和服務器之間傳輸數據的任務的代碼

這不是很容易實現,但有一定的優勢:

  • 後臺同步計劃通過系統與其它網絡請求,以節省電池
  • 它可以通過用戶在同步設置進行配置(禁用或啓用背景同步)
  • 適配器自動重新同步,如果要求與exponential backoff
  • 失敗你可以用你的簡單的使用它的ContentProvider
  • 適配器可以在一個單獨的進程同步,如果你想

Here一些教程。

2

@ Evin1_,

在我看來,重要的事情是:

1/想想順序:

如果一些表nedds信息從另一個,開始他們在同步正確的順序

2/使用索引:

索引是特殊的查找表,數據庫搜索引擎可以 使用,以加快數據檢索

3/使用交易:

它將如果出現給你一個機會回滾錯

4/多線程:

速度和長時間運行的效率,數據密集型操作 通常可以提高,當你把它分解成更小的操作上 多線程

5/防止連接丟失運行:

如果用戶禁用3G或Wifi,您必須能夠知道發生了什麼,顯示錯誤消息或其他內容。

6/DATAS量:

如果你有一個龐大的DATAS量不以sinle的Json給他們,把它切成較小的數據包

希望它能幫助。

+0

兩者都是非常好的答案,但是我會從@gsgsgs中選擇一個,因爲它更加面向Android。謝謝! –

相關問題