Android应用程序永远下载Web内容为字符串(WaitForGcToComplete阻止xx.xxxms导致HeapTrim?)

我是Android开发的新手,我正在尝试创建一个应用程序,只需将给定网页的源代码作为字符串下载并将其显示在日志中。 我有它工作,对于google.com,它的工作相当快。 然而,对于我想要的网页,即使我的计算机的网络浏览器只需几秒钟就可以加载它,它需要十分钟。 在这八分钟内,日志中反复显示四条消息,其值不同。 他们是:

  • W / art:暂停所有线程:x.xxxm
  • I / art:后台stcky并发标记扫描GC释放xx(xxxxB)AllocSpace对象……
  • I / art:后台部分并发标记扫描GC释放xx(xxxxB)AllocSpace对象……
  • I / art:WaitForGcToComplete因xx.xxxms而被阻止,原因是HeapTrip

有人可以解释一下发生了什么,以及我如何能够更快地下载这些内容? 这是某种内存问题吗? 我需要使用某种类型的BufferedReader吗?

记录消息:
单击此处获取日志屏幕截图消息。

码:
点击这里查看我的代码。

最后想出了这一个。 问题是String是一个不可变类,这意味着垃圾收集器需要清除从Java的堆内存中读取下载内容时创建的每个String,这是永远需要的。

修复是在doInBackground方法的第一行创建一个新的StringBuilder(),在整个方法中使用StringBuilder代替String,然后在最后,将StringBuilder转换为String(StringBuilder.toString()) 。