我有一个非常大的位图的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作为局部变量,则无法取消当前正在运行的实例...正确吗?
编辑:问题毫无意义,因为问题是我的一个简单错误。我保留了我的代码更正的问题,并为那些寻找类似的东西的人提供参考
答案 0 :(得分:0)
替换此行
asyncCaller.execute(input);
带
new AsyncCaller().execute(input);