我正在列表视图中显示来自给定的url正在执行的异步任务.if的图像,我正在快速滚动列表视图,因为我的应用程序正在崩溃,因为很多异步任务线程都在并行工作(每个图像都调用异步任务),需要取消/关闭视图中的线程--这些线程是视野之外的。这意味着只有2-3个异步任务线程可以并行运行(我的列表一次只能显示2-3项),是否有人帮助我?
发布于 2012-03-27 05:47:31
一种方法是可以缓冲所有要显示在列表视图中的图像,然后显示。这也将提高您的列表的性能,因为每当您滚动您的列表,它将从网络下载图像,这是很麻烦的。有了这一点,您也不必为在视图之外的组件中终止异步任务而烦恼。
发布于 2012-03-27 06:30:32
在我看来,这似乎不是一个AssynchTask问题,主要是MemoryIssue,如果您正在使用工厂方法解码位图,请使用以下内容
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替换它,而且您还必须修改更多的代码,以使其在程序中可用。
发布于 2012-03-27 10:21:19
我已经找到了这个问题的解决方案,我正在将所有的异步任务活动添加到一个数组列表中。除了最后的2-3个异步任务之外,下面给出了arraylist.code中的所有元素。
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++;
} https://stackoverflow.com/questions/9883863
复制相似问题