我正在探索 Android 开发者网站并阅读一些文章。有一种方法可以使用 AsyncTask 在列表视图中延迟加载图像:
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// If this item hasn't been recycled already, hide the
// progress and set and show the image
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}
}.execute(holder);
但是,对我来说,该代码似乎存在一些问题。假设我们从 Internet 加载图像,它们每个都需要几秒钟的时间来加载。
作为用户,如果我们滚动列表然后切换到另一个活动,将会有一些 AsyncTask 在后台运行并占用一些带宽,而我们可能在新的前台活动中需要它。
您通常如何使用他们的方法处理这种情况?回收视图时,您是否杀死了与持有者关联的 AsyncTask?您是否在适配器中跟踪哪些 AsyncTasks 仍在运行并在活动停止时将它们全部取消?还有其他方法吗?
我的问题主要是关于架构清理部件以解决该问题(而不是实现)