传递数据给AsyncTask:使用execute(args)还是构造函数?

3

在我的项目中,我使用了许多AsyncTask。它们都通过http发送一些数据到服务器。在其中一些任务中,我通过execute( data... )传递数据。在另一些任务中,我使用构造函数来实现:

new SomeTask().execute( 1, 2, 3 );

或者

new SomeOtherTask( 1, 2, 3 ).execute();

基本上这些调用是等价的,因为AsyncTask不能被重复使用并且是无状态的。

如何更好地使用它们?我是否遗漏了什么?


2个回答

0
在我看来,将参数传递给execute方法(如果它们都共享相同的类型,当然)。使用自定义构造函数会强制你编写它,并将参数存储在私有变量中,这是无用的,除非这些参数例如在OnPostExecute方法中被使用。

是的,关于 onPre/PostExecute 也是这种情况。例如,在 pre 中我显示进度条,在 post 中隐藏它。 - injecteer
参数可以被视为短暂的数据,它们仅在doInBackground中用作输入,没有其他用途。如果这些参数更有价值,如果它们的范围超出了doInBackground,则必须成为任务的一部分并在构造函数中设置。 - ToYonos

0

使用 new SomeTask().execute( 1, 2, 3 );

这比将值传递给构造函数更好。如果您将输入作为参数传递给构造函数,则需要创建成员变量,这是不必要的,因为 AsyncTask 允许我们在 execute 方法中传递可变参数。

除非有必要维护传递给 AsyncTask 的输入的成员变量,否则不应使用构造函数传递输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接