1

我的Android應用程序在調用Web服務認證API基於類型的數據從服務器下載和同步記錄。永久連接調用

例如:

應用程序呼叫API在循環對不同內容類型Commerce, Science, Arts)。

現在對於每個內容類型,應用程序維護last sync date所以它只能是日期,統計最近一個月後同步數據。

API調用看起來像:

private void loadData(){ 
    String apiUrl = ""; 
    String[] classArray = { "Commerce", "Science", "Arts" }; 
    try{ 
     for(int classIndex = 0; classIndex < classArray.length; classIndex++){ 
      apiUrl = "http://www.myserver.com/datatype?class="+classArray[classIndex]+"&syncDate="+lastSyncDate; 

      String responseStr = getSyncData(apiUrl); 

      // Code to parse the JSON data and store it in SqliteDB. 
     } 

    }catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

private String getSyncData(String webservice){ 
    String line = "", jsonString = ""; 

    try{ 
     URL url = new URL(webservice); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY); //using proxy may increase latency 
     conn.setInstanceFollowRedirects(false); 

     String userName = "[email protected]", password = "abc123"; 
     String base64EncodedCredentials = Base64.encodeToString((userName 
       + ":" + password).getBytes(), Base64.URL_SAFE 
       | Base64.NO_WRAP); 
     conn.setRequestProperty("Authorization", "basic "+ base64EncodedCredentials); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     while ((line = rd.readLine()) != null) { 
      // Process line... 

      return line; 

     } 

      rd.close(); 

     } 

    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return jsonString; 

} 

此方法getSyncData()返回JSON響應,該響應被解析並存儲在SqliteDb

此代碼工作正常。但是,如果classArray中的內容類型更多,並且每個類都有大數據集,則會存在輕微的性能問題。

我的問題是:

爲了改善這一過程中的整體表現,我可以打開 到www.myserver.com連接,並通過與循環API調用的參數,以停止對每個內容連連創建連接類型。

這裏我使用HttpURLConnection的API調用,但可以在Java中使用的任何其他技術。

主要目的是使連接持久的,因此該應用程序不應該一次又一次地創造它爲每個調用,因爲每次調用應用程序創建它消耗更多的時間一個單獨的連接。

+0

HTTP不是永久性協議 – njzk2 2013-04-11 09:53:06

+0

@ njzk2 - 我不是停留在HTTP,可以使用任何最好的技術在Java中,以提高性能。 – 2013-04-11 09:54:31

+0

有系統(我不記得具體是哪個)在多部分請求中一次發送多個請求 – njzk2 2013-04-11 09:59:47

回答

0

我已經做了類似的處理之前webcall -> parse JSON -> store DB -> show/update views

,並用大量的測試和調試的,我發現,其實什麼拖慢進程是store DB部分,無關的webcall或JSON解析。

我解決的情況下,改成:

webcall -> parse JSON -> fire new thread to store DB -> show/update views

,並與簡單的改變我的成績開始出現在1秒的問題(而不是以前的5到6秒)。

希望它有幫助。

編輯:

關於連接本身,你可以使用網絡套接字(這是持久的,但不是在Android的很好的實現,你就必須做手工解析相當的量)所以我建議先測試一下DB。

+0

感謝您的快速回復。是的,當然DB也是一個問題。還優化數據庫操作,但仍然需要持續連接以獲得最高性能。 – 2013-04-11 10:37:59

+0

我理解你的擔憂,但根據我的經驗,嘗試在新線程中簡單地觸發DB操作並檢查性能差異,這非常大! – Budius 2013-04-11 10:42:20

+0

是的,會嘗試。謝謝。 – 2013-04-11 10:50:09