[英]Where is the memory leaking?
我正在嘗試下載頁面的源代碼。 但是,當我運行代碼時,它將永久運行,並且日志將永遠顯示類似的內容。
GC_FOR_ALLOC釋放274K,13%釋放6863K / 7815K,暫停0ms
這是我的代碼:
class downloadSource extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String line = "";
int x;
try {
URL url = new URL(params[0]);
InputStream inputStream = url.openStream();
InputStreamReader reader = new InputStreamReader(inputStream);
x = reader.read();
while (x != -1) {
char c = (char) x;
x = reader.read();
line += c;
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return line;
}
我從OnCreate方法中這樣稱呼它:
downloadSource task2=new downloadSource();
String source = "";
try {
source = task2.execute("https://www.imdb.com/list/ls052283250/").get();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
請幫我 ! 謝謝
您的問題可能與內存泄漏無關。 正如Holger所述 ,雖然讀取流的方法效率低下,但這也不是您的主要問題。
嘗試將以下行添加為onCreate的第一行:
System.setProperty("http.keepAlive", "false");
發生的事情是,沒有設置此屬性,您的連接將保持活動狀態,等待更多請求完成,並且僅在超時時返回。 將其設置為false可以使其在請求完成后立即返回。 為了更好地理解該概念,請閱讀以下答案: 如何解釋“連接:保持活動,關閉”? 。
關於流讀取效率低下,我建議您將實現更改為類似於以下代碼的內容:
URL url = new URL(params[0]);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder builder = new StringBuilder();
String current;
while ((current = reader.readLine()) != null) {
builder.append(current);
}
line = builder.toString();
reader.close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.