我有一個安裝在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
兩者都是非常好的答案,但是我會從@gsgsgs中選擇一個,因爲它更加面向Android。謝謝! –