【问题标题】:Can I pass different types of parameters to an AsyncTask in Android?我可以将不同类型的参数传递给 Android 中的 AsyncTask 吗?
【发布时间】:2010-10-13 08:13:21
【问题描述】:
我想实现一个通用的线程保存类,它采用 ImageView 的 RessourceId 和存储所需图像文件的 Url (http)。它将下载图像并填充 UiThread 中 ImageView 的 src。
我认为AsyncTask 对我来说是最好的选择。但是我注意到我只能将一种类型的参数传递给doInBackground() 方法。就像一个 URL 数组。真的吗?你会建议我什么?
【问题讨论】:
标签:
android
multithreading
android-asynctask
【解决方案1】:
您可以将参数作为对象传递
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;
}
}
【解决方案2】:
您可以将 setter 方法添加到您的 AsyncTask 实现中,甚至可以定义您自己的构造函数来传递额外的参数。
或者,如果您的AsyncTask 实现是活动的内部类,您可以访问活动的所有实例变量。我自己更喜欢上面的选项,因为它清楚地表明了任务需要哪些数据。