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

Android app taking forever to download web content as string (WaitForGcToComplete blocked for xx.xxxms for cause HeapTrim?)

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

谁能解释一下这是怎么回事,我怎样才能让这些内容的下载速度显着加快?这是某种记忆问题吗?我需要使用某种 BufferedReader 吗?

日志消息:

代码:

终于想通了。问题是 String 是一个不可变的 class,这意味着垃圾收集器需要清除在从 Java 的堆内存中读取下载内容时创建的每个 String,这将永远持续下去。

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