我试图使用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