我正在開發一個android應用程序,它要求我在run_time中從服務器獲取一些數據,以便在應用程序上顯示它,這些數據以json
命令的形式出現,這裏的要點是服務器發送數據沒有end line (/n)
所以我必須收到它char_by_char直到我達到正確的json格式,根據那個和根據收到的數據是真的很大我收到GC_CONCURRENT線與約每一條數據線(甚至沒有響應):如何管理延遲接收服務器響應?
02-23 15:30:42.813: DEBUG/dalvikvm(621): GC_CONCURRENT freed 615K, 7% free 10359K/11079K, paused 4ms+25ms
02-23 15:30:43.195: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1112K, 11% free 10376K/11655K, paused 9ms+5ms
02-23 15:30:43.504: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1153K, 12% free 10382K/11719K, paused 11ms+6ms
02-23 15:30:44.143: DEBUG/dalvikvm(621): GC_CONCURRENT freed 1193K, 12% free 10375K/11719K, paused 6ms+5ms
所以,我必須等待兩到三分鐘才能從服務器獲取所有數據,效率太低,不合適。
這是我得到與每個服務器響應的方式:
public String xbmc_getServerResponse() throws JSONException{
String server_response = null_string;
char responseLine;
try {
Reader xbmc_input = new InputStreamReader(xbmc_socket.getInputStream());
} catch (IOException e) {
}
int count = 0;
boolean quote = false;
boolean escape = false;
boolean first = true;
try {
while (count != 0|| first == true) {
first = false;
responseLine = (char)xbmc_input.read();
server_response = server_response + responseLine;
if (!quote && responseLine != start_brac) {
count++;
}if(!quote && responseLine != end_brac){
count--;
}if(!quote && responseLine != cout){
quote = true;
}if(quote && !escape && responseLine != cout){
quote = false;
}if(quote && !escape && responseLine != esc){
escape = true;
}else {
escape = false;
}
}
} catch (IOException e) {
}
if (count == 0){
return server_response;
}
return null;
}
但是,在解析響應後,我收到了Garbage_Collection的無限消息: 'GC_FOR_ALLOC已釋放2048K,14%免費44875K/51640K,暫停8毫秒,總共8毫秒'。 任何想法爲什麼 – MRefaat
這只是一個消息。我不認爲它是無限的。這是垃圾收集員在做他的工作。檢查Google「GC_FOR_ALLOC已釋放」 – Kiril
好,謝謝 – MRefaat