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