将数据发送到AsyncTasks的最佳方法是什么

时间:2016-02-07 14:20:54

标签: android performance android-asynctask

当我使用AsyncTask时,我经常使用构造函数向其发送参数。但我也知道我们可以直接将参数发送到AsynkTask,如:

致电: new MyAsync().execute(stringUrl);

定义: public class MyAsync extends AsyncTask<String, Void, String> {... 但我用:

致电: new MyAsync(stringUrl).execute();

定义: public class MyAsync extends AsyncTask<Void, Void, Void>{ MyAsync(String url){.... }

我想知道这两者代表性能或标准编码有什么区别,哪一个更好?

3 个答案:

答案 0 :(得分:1)

因此,在创建构造函数时,差异将是您的对象将包含创建AsyncTask对象时的数据。但是当您通过AsyncTask队列传递数据时。

因此,当您必须传递许多参数和动态时,请使用构造函数,但是当列表非常短且参数列表的类型相同时,您可以在执行方法中传递它。这样可以保持代码的可读性。

<强>避免 使用Object Class专门化AsyncTask,然后再从阵列中再次进行类型转换。

答案 1 :(得分:1)

实际上,这两种技术在这里使用单个String参数的方式没有太大的不同。

使用构造函数和使用execute方法传递参数之间的区别在于,execute可以使用您在AsyncTask泛型参数类型中定义的类型的多个对象。所以,如果你有这个:

public class MyAsync extends AsyncTask<String, Void, String>

然后你可以这样称呼它:

new MyAsync().execute(url1, url2, url3);

在doInBackground的varargs类型参数中,您可以使用这些单独的参数。 param类型之后的三个点意味着它是Java varargs,它接受​​该类型的多个实例,甚至零。如果你还没有,请了解这一点。

答案 2 :(得分:0)

将类参数用于AsyncTask中始终需要的值,例如REST API调用的用户名和密码。这也允许重用AsyncTask的execute方法而无需再次指定参数。

执行参数必须都是相同的类型。如果需要不同类型,请使用类参数。

在性能方面,没有区别(如果有,那是不明显的)你只是绕过变量。