我想实现一个通用的线程保存类,它接受ImageView的RessourceId和存储所需图像文件的Url(http)。它将下载图像并在UiThread中填充ImageView的src。
我认为AsyncTask对我来说是最好的。但是我注意到我只能将一种类型的参数传递给doInBackground()
方法。就像一个Urls数组。真的吗?你会建议我什么?
答案 0 :(得分:49)
您可以将params作为对象传递
new MyTask().execute(url, str, context);
public class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected Void doInBackground(Object... params) {
Url url = (Url) params[0];
String str = (String) params[1];
Context ctx = (Context) params[2];
return null;
}
}
答案 1 :(得分:21)
您可以将setter方法添加到AsyncTask
实现中,甚至可以定义自己的构造函数来传递其他参数。
或者,如果您的AsyncTask
实施是活动的内部类,则可以访问活动的所有实例变量。我自己更喜欢上面的选项,因为它清楚地表明了任务需要哪些数据。