AsyncTask中执行参数的类型安全替代方法

时间:2014-07-16 11:40:18

标签: java android android-asynctask

将参数传递给AsyncTask

有两种方法
  1. 定义第一个通用参数并使用此类型的列表/数组并将其传递给execute()
  2. 通过构造函数传递所有必要的参数,将它们存储在字段中并在execute
  3. 中访问它们

    我发现第一种方法更具可读性,但有时它在类型安全性方面缺乏灵活性,例如,如果你想传递一个字符串,一个整数和一个布尔值,似乎不清楚如何处理它。

    public Result doInBackground(String... params) {
       String param1 = params[0];
       int param2 = Integer.valueOf(params[1]);
       boolean param3 = Boolean.valueOf(params[2]);
       // ...
    }
    

    字符串解析,将它放在Bundle等等。总有一个解决方案,但我从语义/方法签名的角度来看这令人不快。任何替代方案?

2 个答案:

答案 0 :(得分:1)

为什么不为示例创建类持有者

static Class Holder {
  int i;
  String s;
  boolean b;
}

public Result doInBackground(Holder... params) {
   Holder holder = params[0];
   String holder.s;
  // ...
 }

然后通过execute()将它发送到doBackground()。 当我想发送到网络时,我做了很多次

这只是一个骄傲的例子。 希望它有所帮助。

答案 1 :(得分:0)

您可以使用Loaders代替。

从一开始就很麻烦,但是你不会遇到任何类型安全的问题,因为它以完全不同的方式工作。

加载器的主要功能是它们与一个与活动/片段生命周期绑定的管理器一起工作。