小编Mat*_*teo的帖子

管理多个asynctask从html代码下载多个图像,泄漏内存,任何想法?

我正在开发一个Android应用程序.现在我正在将bbcode解析为html并将其显示在textview中,textview位于自定义列表视图中.我使用Html.ImageGetter()来显示从AsyncTask下载的图像.

它适用于少量图片.但是,如果要求应用程序下载40-50张图片,则会创建40-50个任务,这会变得一团糟.每个任务都会打开一个流来下载图像.之后,它将字节解码为位图,调整大小,将它们保存到SD卡并循环使用位图.

现在,如果应用程序同时加载所有这些图像,它会使用大量内存.我设法让它通过48 MB.16到48之间有一个很大的差距:(.我搜索了如何解决这个问题.我从谷歌下载了AsyncTask代码:

http://google.com/codesearch/p?hl=en&sa=N&cd=2&ct=rc#uX1GffpyOZk/core/java/android/os/AsyncTask.java&q=lang:java%20AsyncTask

并将池大小设置为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)

html android drawable android-listview android-asynctask

8
推荐指数
1
解决办法
2万
查看次数