【问题标题】:AsyncTask called a lot from many placesAsyncTask 从很多地方调用了很多
【发布时间】:2013-04-25 13:34:35
【问题描述】:

我正在使用一个简单的 AsyncTask 将网页的源代码作为字符串下载。到目前为止一切正常。

但是,我不想总是对结果字符串做同样的事情,有时我想用它填充 gui,有时我想解析它,有时我想用它作为参数调用更多函数. 实际上,我有不止一个活动和不止一个类需要下载页面的源代码。

当然,onPostExecute() 是必须处理我的任务结果的东西,但由于它会从很多地方调用,并且出于很多不同的原因,我真的很茫然。

我能做什么?

我真的不想写 20 个 AsyncTask,它们总是在他们的 doInBackground(...) 中使用不同的 onPostExecute 做同样的事情,我也不希望来自 20 个不同的类/活动的代码最终在一个 onPostExecute 中结束,我的代码维护起来会很复杂。

有什么建议吗? 谢谢

【问题讨论】:

  • 为什么不创建一个公共类将方法共享给其他类。
  • 编写一个自定义 AsyncTask 类覆盖/实现现有的类

标签: android user-interface android-asynctask


【解决方案1】:

我会通过使用接口来解决它。创建一个异步任务,在 doInBackground 中执行正确的操作,并接受一些参数,以便您知道在 onPostExecute 中要做什么,并将参数和结果传递给 onPostExecute。

然后使用 handleSourceCodeString(String source); 之类的方法创建一个接口,然后为您想要执行的每个操作实现一个类。然后将类放在某个 init 函数中的映射中。

Map<String, Class> myActionMap = new HashMap<String,Class>;
myActionMap.put("parse-soruce", ParseSource.class) //(where ParseSource.class implements your interface)

然后在您的 postExecute 中执行以下操作:

((MyActionInterface)myActionMap.get(action).newInstance()).handleSourceCodeString(source);

【讨论】:

    【解决方案2】:

    我发现了这个......喜欢这个想法......在我看来,这似乎比使用接口更直接而且更好。

    AsyncTask onPostExecute call from outside the AsyncTask

    看第一个答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      相关资源
      最近更新 更多