我試圖使用AsyncTask
類來獲取網站的內容。 logcat反覆告訴我W/art: Suspending all threads took: 15(or any other number)ms
。我的應用程序被凍結,直到日誌消息完成打印。 UI在日誌完成後顯示。我跟着一個教程,並重新檢查我的代碼應該與教程相同。過了一段時間,它從網站上記錄了幾行代碼,但沒有更多。我也嘗試過不同的網站。這是我的AsyncTask:應用程序掛起並掛起所有線程,同時使用AsyncTask
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DownloadTask task = new DownloadTask();
String result = null;
try {
result = task.execute("http://www.vg.no/").get();
Log.i("URL content" , result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
這種固定的應用程序凍結,但我仍然得到所有的「W /藝術:暫停所有線程:日誌中的9.850ms「消息。我還得到:「I/art:背景部分併發標記掃描GC已釋放58(2048B)AllocSpace對象,45(16MB)LOS對象,40%免費,21MB/36MB,暫停7.230ms總計23.895ms」 –
@EmilØgård這些各種消息對所有應用程序都很常見,您不應該擔心。它們只是Android框架日誌的一部分,用於診斷內存管理問題和調試問題。在幾乎所有的應用程序中,它們都可以安全地忽略(並且無法擺脫它們)。 – adelphus
更具體地說,「mark sweep GC」是報告垃圾回收器正在做什麼來回收內存。 「暫停所有線程」消息是因爲垃圾收集器執行其工作時,所有線程都必須暫停。這種特殊的掃描花費了大約24毫秒,或大約十分之一的眨眼。 ;-) – nasch