我可以将不同类型的参数传递给Android中的AsyncTask吗?

时间:2010-10-13 08:13:21

标签: android multithreading android-asynctask

我想实现一个通用的线程保存类,它接受ImageView的RessourceId和存储所需图像文件的Url(http)。它将下载图像并在UiThread中填充ImageView的src。

我认为AsyncTask对我来说是最好的。但是我注意到我只能将一种类型的参数传递给doInBackground()方法。就像一个Urls数组。真的吗?你会建议我什么?

2 个答案:

答案 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实施是活动的内部类,则可以访问活动的所有实例变量。我自己更喜欢上面的选项,因为它清楚地表明了任务需要哪些数据。