我有一个AsyncTask设置如下:
private class ParseHTMLOperation extends AsyncTask<String, Void, List<Shout>> {
@Override
protected List<Shout> doInBackground(String... params) {
List<Shout> shouts = new LinkedList<>();
Document doc = Jsoup.parse(params[0]);
Elements messages = doc.select("li");
for (int i = messages.size() - 1; i >= 0; i--) {
Element tempElement = messages.get(i);
String username = tempElement.select(".username").text();
String message = tempElement.select(".message").text();
shouts.add(new Shout(R.drawable.ic_launcher, username, message);
}
return shouts;
}
@Override
protected void onPostExecute(List<Shout> result) {
adapter.clear();
adapter.data = result.toArray(new Shout[result.size()]);
adapter.addAll(result);
adapter.notifyDataSetChanged();
setProgressBarIndeterminateVisibility(false);
}
@Override
protected void onPreExecute() {
setProgressBarIndeterminateVisibility(true);
}
}
这里的问题是:如果UI中有任何内容,(我到目前为止已经使用Progressbar,模式弹出窗口和此ProgressBarIndeterminate进行了测试)此行
Document doc = Jsoup.parse(params[0]);
无法完成。它只是在控制台中吐出这个:
我/艺术:背景粘性并发标记扫描GC释放1673(100KB)AllocSpace对象,0(0B)LOS对象,965%免费,2MB / 4MB,暂停8.964ms总计96.186ms
我/艺术:背景部分并发标记扫描GC释放2716(200KB)AllocSpace对象,9(754KB)LOS对象,1081%免费,2MB / 4MB,暂停14.142ms总计210.242ms
我/艺术:背景部分并发标记扫描GC释放2219(112KB)AllocSpace对象,3(88KB)LOS对象,733%免费,2MB / 6MB,暂停14.403ms总计167.266ms
我/艺术:背景粘性并发标记扫描GC释放2194(131KB)AllocSpace对象,0(0B)LOS对象,700%免费,3MB / 6MB,暂停9.194ms总计149.442ms
但是,如果我按下主页按钮;它很快就会在几秒钟内完成解析。
如果我注释掉这两个setProgressBar ...方法,它会毫无问题地解析它。
编辑:它最终完成了解析...但它需要接近100000毫秒,通常它将在最大5000毫秒内完成,此外它需要大约7000毫秒才能跳转到onPostExecute();阻止,通常它在100ms以下的路上。