当我使用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){.... }
我想知道这两者代表性能或标准编码有什么区别,哪一个更好?
答案 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方法而无需再次指定参数。
执行参数必须都是相同的类型。如果需要不同类型,请使用类参数。
在性能方面,没有区别(如果有,那是不明显的)你只是绕过变量。