2011-04-20 58 views
0

我正在爲Android創建應用程序。我希望儘可能快地完成其他呼叫。 (!)當我得到我的結果作爲XML需要5秒鐘就可以簡單的XML這樣的:如何改善我在Android上的休息電話?

<souvenirs> 
    <souvenir> 
     <id>1</id> 
     <name>Example 1</name> 
     <rating>3.4</rating> 
     <photourl>/images/example.jpg</photourl> 
     <price>3.50</price> 
    </souvenir> 
    <souvenir> 
     <id>2</id> 
     <name>Example 2</name> 
     <rating>2.4</rating> 
     <photourl>/images/example.jpg</photourl> 
     <price>8.50</price> 
     </souvenir> 
    </souvenirs> 

所以我用JSON嘗試過。但是,這也需要大約5秒鐘才能找回。

我加載在Android上的XML用下面的代碼:

 URL url = new URL("http://example.nu?method=getAllSouvenirs"); 
      URLConnection conn = url.openConnection(); 
      long t=System.currentTimeMillis(); 

      InputStream ins = conn.getInputStream(); 
      Log.d("info", String.valueOf((System.currentTimeMillis()-t))); 

日誌說,它大約需要5000毫秒獲得InputStream的..有什麼辦法可以加快這個嗎?有誰知道Android Market使用哪種技術?這會將比我的應用程序的方式更快..

提前感謝! :)

+0

您確定服務器不是問題,因爲它太慢? – alopix 2011-04-20 11:24:59

回答

2

當您嘗試獲取數據「手動」 - 通過瀏覽器或通過其他方式(wget的,捲曲)多長時間那邊去。

在Android上,你也應該把移動網絡考慮的是通常比臺式計算機顯著慢。延遲也更大。

對我來說,這聽起來很像在後端的問題(例如,試圖解決客戶端的IP,因此拍了很多的時間)。

0

也許這就是它是如何實現的,你不能什麼都不做。這是我的猜測。 我的意見是做你自己的線程(放在後臺)和前景(主UI線程)的所有基於連接的東西招待用戶。 :)

我打了一點點解決這個和它的作品不夠快,我...這裏是我的代碼:

private static HttpResponse doPost(String url, JSONStringer json) { 
    try { 
     HttpPost request = new HttpPost(url); 
     StringEntity entity; 
     entity = new StringEntity(json.toString()); 

     entity.setContentType("application/json;charset=UTF-8"); 
     entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8")); 
     request.setEntity(entity); 

     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpResponse response = httpClient.execute(request); 
      return response; 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

而且別的地方我調用該方法,如:

HttpResponse httpResponse = doPost(url, json); 
BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); 

它工作正常,我...

+0

謝謝,當我在我的計算機上執行url時,它只需要大約100ms,所以這不是問題。我只是想知道如何才能使我的應用程序與Android Market一樣快...... – Martijn538 2011-04-20 11:43:33

+0

@Martijn從您的手機瀏覽器中嘗試此操作。 – 2011-04-20 12:01:55

+0

我試過了,這比在我的應用中使用它快。 現在我正在嘗試實現Keepalive到我的httpClient。有人知道怎麼做這個嗎?我聽說在應用程序中重用HttpClient可以提高速度。我通過在主活動中創建它來重用我的HttpClient。然後,當開始另一個活動,我把它傳遞給我的意圖(putExtra),並使我的HttpClient Parceable ..這是做到這一點的正確方法? – Martijn538 2011-04-20 12:52:15

1

使用Apache的HttpClient代替的URLConnection: Apache http client or URLConnection

編輯(2012-02-07):不再適用於較新的Android平臺請閱讀:http://android-developers.blogspot.com/2011/09/androids-http-clients.html

+1

無論你使用HttpClient或UrlConnection或運送鴿子,不應該花5秒與一個像樣的遙控器。 – 2011-04-20 11:33:04

+0

@Heiko Rupp true ...但HttpClient似乎更快,然後UrlConnection – Selvin 2011-04-20 11:41:21

+0

所以,我現在嘗試HttpClient。結果: 04-20 14:00:47.011:DEBUG /信息(7126):JSON呼叫持續時間:3312 04-20 14:01:26.621:DEBUG /信息(7126):JSON呼叫持續時間:3207 04 -20 14:01:27.631:DEBUG/info(7126):json通話時長:2103 04-20 14:01:json通話時長:1009 04-20 14:01:42.521: 43.861:DEBUG/info(7126):json通話持續時間:1333年 04-20 14:02:00.651:DEBUG/info 7126):json通話時間:1190年 – Martijn538 2011-04-20 12:01:32