AsyncTask中执行参数的java类型安全替代方案
有两种方法可以将参数传递给AsyncTask
- 定义第一个泛型参数并使用此类型的列表/数组,并通过
execute()
传递它 - 通过构造函数传递所有必要的参数,将它们存储在字段中,并在
execute
中访问它们
我发现第一种方法更具可读性,但有时它在类型安全方面缺乏灵活性,例如,如果要传递字符串、整数和布尔值,似乎不清楚如何处理
public Result doInBackground(String... params) {
String param1 = params[0];
int param2 = Integer.valueOf(params[1]);
boolean param3 = Boolean.valueOf(params[2]);
// ...
}
字符串解析,把它放在Bundle
中,等等。总有一个解决方案,但从语义/方法签名的角度来看,我发现这令人不快。还有别的选择吗
# 1 楼答案
例如,为什么不创建一个类持有者呢
然后通过execute()将其发送到doBackground()。。 当我想发送到web时,我做了很多次
这只是克劳斯的一个例子。 希望能有帮助
# 2 楼答案
您可以使用Loaders
它一开始可能会很麻烦,但那时不会有任何类型安全问题,因为它的工作方式完全不同
加载程序的主要功能是与绑定到活动/片段生命周期的管理器一起工作