我正在开发一个Android应用程序.现在我正在将bbcode解析为html并将其显示在textview中,textview位于自定义列表视图中.我使用Html.ImageGetter()来显示从AsyncTask下载的图像.
它适用于少量图片.但是,如果要求应用程序下载40-50张图片,则会创建40-50个任务,这会变得一团糟.每个任务都会打开一个流来下载图像.之后,它将字节解码为位图,调整大小,将它们保存到SD卡并循环使用位图.
现在,如果应用程序同时加载所有这些图像,它会使用大量内存.我设法让它通过48 MB.16到48之间有一个很大的差距:(.我搜索了如何解决这个问题.我从谷歌下载了AsyncTask代码:
并将池大小设置为3.但这没有帮助.我真的无法弄清楚我在哪里失去了公羊.一旦我把一个大任务队列,我的公羊就疯了.收到一些图像后,它变得最糟糕.我不认为这是图像,因为我可以在显示任何图像之前达到30 mb.该应用程序本身包括视图,信息及其服务使用13 MB,其余所有泄漏在这里.
队列本身是否会进行大的ram分配?或者是Html.ImageGetter()以某种方式泄漏了大量的内存?有一个更好的方法吗?
在这里我加载图像:
public void LoadImages(String source) {
myurl = null;
try {
myurl = new URL(source);
} catch (MalformedURLException e) {
e.printStackTrace();
}
new DownloadImageFromPost().execute(myurl);
}
private class DownloadImageFromPost extends AsyncTask<URL, Integer, Bitmap> {
@Override
protected Bitmap doInBackground(URL... params) {
URL url;
Log.d(TAG, "Starting new image download");
try {
url = params[0];
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
int length = connection.getContentLength();
InputStream is = (InputStream) url.getContent();
byte[] imageData = new byte[length]; …Run Code Online (Sandbox Code Playgroud)