首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果任务不在视图中,如何杀死异步任务?

如果任务不在视图中,如何杀死异步任务?
EN

Stack Overflow用户
提问于 2012-03-27 05:34:50
回答 3查看 744关注 0票数 0

我正在列表视图中显示来自给定的url正在执行的异步任务.if的图像,我正在快速滚动列表视图,因为我的应用程序正在崩溃,因为很多异步任务线程都在并行工作(每个图像都调用异步任务),需要取消/关闭视图中的线程--这些线程是视野之外的。这意味着只有2-3个异步任务线程可以并行运行(我的列表一次只能显示2-3项),是否有人帮助我?

EN

回答 3

Stack Overflow用户

发布于 2012-03-27 05:47:31

一种方法是可以缓冲所有要显示在列表视图中的图像,然后显示。这也将提高您的列表的性能,因为每当您滚动您的列表,它将从网络下载图像,这是很麻烦的。有了这一点,您也不必为在视图之外的组件中终止异步任务而烦恼。

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 06:30:32

在我看来,这似乎不是一个AssynchTask问题,主要是MemoryIssue,如果您正在使用工厂方法解码位图,请使用以下内容

代码语言:javascript
复制
public Bitmap decode(String file, int quality) {
    BitmapFactory.Options o2 = null;
    try {

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file, o);

        final int REQUIRED_WIDTH = 240;
        final int REQUIRED_HEIGHT = 280;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;

        int scale = quality;

        scale = quality;
        while (true) {
            if (width_tmp / 2 < REQUIRED_WIDTH
                    || height_tmp / 2 < REQUIRED_HEIGHT)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }
        o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
    } catch (Exception e) {
        Log.i("Decodeing error2", "" + e.getMessage());

    }
    try {
        return BitmapFactory.decodeFile(file, o2);
    } catch (Exception e) {
        Log.i("Decodeing error1", "" + e.getMessage());
        return null;
    }

在质量上,将4或5放入文件中,您可以用InputStream替换它,而且您还必须修改更多的代码,以使其在程序中可用。

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 10:21:19

我已经找到了这个问题的解决方案,我正在将所有的异步任务活动添加到一个数组列表中。除了最后的2-3个异步任务之外,下面给出了arraylist.code中的所有元素。

代码语言:javascript
复制
if(count<maxConst){
                task=new HandleOfferImage();
                offerImageTask.add(task);
                task.execute(obj);
                count++;
            }else{ 
                for(int nCount=0;nCount<offerImageTask.size()-2;nCount++){
                offerImageTask.get(nCount).cancel(true);
                offerImageTask.remove(nCount);

                }
                task=new HandleOfferImage();
                offerImageTask.add(task);
                task.execute(obj);
                count++;
            } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9883863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档