2013-03-13 61 views
0

我必須在android應用程序中爲項目調用背景中的多個服務。 在每個服務中,我必須調用單獨的Web服務並獲取一些數據並使用本地sqlite數據庫進行處理。我可以單獨調用每個服務,並可以使用本地數據庫來處理它的結果。 但無法按順序調用所有服務。 我的代碼如下:在android中調用多個服務在後臺android

@Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
     Timer timer = new Timer(); 

     final SyncTableUsers syncUserObj = new SyncTableUsers(LocalService.this); 
     final SyncTableVehicles syncVehicleObj = new SyncTableVehicles(this); 
     final SyncTableLicenses syncLicenseObj = new SyncTableLicenses(this); 
     final SyncTableTags syncTagObj = new SyncTableTags(this); 
     final SyncTableTagMappings syncTagMapObj = new SyncTableTagMappings(this); 
     final SyncTableAddresses syncAddressObj = new SyncTableAddresses(this); 
     final SyncTableDispatches syncDispatchObj = new SyncTableDispatches(this); 
     final SyncEditCompany syncCompanyObj = new SyncEditCompany(LocalService.this); 
     final SyncEditVehicle syncEditVehicleObj = new SyncEditVehicle(LocalService.this); 
     final SyncEditUser syncEditUserObj = new SyncEditUser(this); 
     final SyncVehicleLog vLogObj = new SyncVehicleLog(LocalService.this); 
     TimerTask timerTask = new TimerTask() { 

      @Override 
      public void run() { 
         syncUserObj.syncUserData(); 
         syncVehicleObj.syncVehicleData(); 
         syncLicenseObj.syncLicensesData(); 
         syncTagObj.syncTagData(); 
         syncTagMapObj.syncTagMappingData(); 
         syncAddressObj.syncAddressData(); 
         syncDispatchObj.syncDispatchData(); 
         syncCompanyObj.syncCompanyData(); 
         syncEditVehicleObj.syncVehicleData(); 
         syncEditUserObj.syncUserData(); 
         Log.i("TAG", "LogId After insert values "); 
       } 
      } 
     }; 
     timer.scheduleAtFixedRate(timerTask, 10000, 180000); call after every 
                  3 minute 
     super.onStart(intent, startid); 

syncUserData是一種方法,它調用Web服務。

回答

2

我建議你去AsyncTask解決方案。這是一種簡單而直接的方式來運行請求或任何其他後臺任務,並使用具有最新OS virsion的設備調用Web服務,您必須使用AsyncTask。

它也很容易實現,例如, onProgressUpdate,如果您需要在運行請求時顯示某種進度條。

private class YourTask extends AsyncTask<URL, Integer, Long> { 
protected Long doInBackground(URL... urls) { 
    //call your methods from here 
     //publish yor progress here.. 
     publishProgress((int) ((i/(float) count) * 100)); 
} 

protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); 
} 

protected void onPostExecute(Long result) { 
    //action after execution success or not 
} 
}