Android - 检查异步任务的实例是否正在运行并在执行新任务之前将其取消

时间:2014-10-20 18:22:19

标签: android android-asynctask cancellation

我有一个非常大的位图的gridview。为了防止内存不足错误,我只加载了一些位图并使用onScrollListener我回收非nessecary位图并创建需要显示的位图。加载位图进程是在异步任务中完成的。这是每次滚动停止时调用的更新方法

AsyncCaller asyncCaller;

public void updateImageList(int first, int last){
        if(!asyncCaller.isCancelled()){asyncCaller.cancel(true);}
        asyncCaller=null;
        asyncCaller=new AsyncCaller();
        asyncInput input=new asyncInput();
        input.first=first;
        input.last=last;
        input.id=Integer.toString(asyncId);
        asyncId++;
        asyncCaller.execute(input);
}

其中asyncCaller是一个类变量。

此代码在asyncCaller.execute(输入)处导致NullPointerException;线。有人可以告诉我为什么因为我在调用execute之前向asyncCaller提出了一个新实例吗?

我使用asyncCaller作为类变量,以便在当前运行的AsyncTask完成之前已经进行了新的滚动时取消它。没有理由让它继续运行,因为不再需要这些位图。

如果我在updateImageList方法中使用asyncCaller作为局部变量,则无法取消当前正在运行的实例...正确吗?

编辑:问题毫无意义,因为问题是我的一个简单错误。我保留了我的代码更正的问题,并为那些寻找类似的东西的人提供参考

1 个答案:

答案 0 :(得分:0)

替换此行

asyncCaller.execute(input);

new AsyncCaller().execute(input);