簡體   English   中英

內存在哪里泄漏?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM