1

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

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

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

我能做些什么?

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

有什么建议吗?谢谢

4

2 回答 2

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);
于 2013-04-25T13:56:05.757 回答
0

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

从 AsyncTask 外部调用 AsyncTask onPostExecute

看第一个答案

于 2017-02-01T18:41:29.830 回答