【发布时间】:2015-01-05 22:37:03
【问题描述】:
我在 android 中有一个应用程序,我正在访问几个 REST web 服务。我正在使用 AsyncTasks 来访问这些并在之后进行一些 UI 更改。我想在不同的活动中使用其中一些调用。然而,根据我读过的所有教程,AsyncTasks 被用作活动中的内部类(这是有道理的,因为它们正在改变这些活动中的视图)。但是我怎样才能解决那些 AsyncTask 的可重用性呢?更重要的是,假设我想在位置更改时执行一些 AsyncTasks 调用。我有一个 LocationListener (它是一个外部类),我想在 onLocationChange() 方法内部进行 API 调用。但我无法访问我想要的视图,因为我不在活动课程中。有没有人有一个很好的解决方案或想法如何做类的架构?谢谢。
【问题讨论】:
-
从 OO 的角度来看,您应该创建可重用的业务组件,而不是可重用的 AsyncTask。查看我的回答 here 了解更多详情。
-
你是对的,但是,当我唯一需要的是 onPostExecute() 方法在不同活动中的不同实现时,它似乎重复了很多代码。
-
IMO 隔离 AsyncTask 要好得多,您不会获得任何真正的好处(可重用性、可测试性),而不是增加编码复杂性(传入和传出上下文引用)。从面向对象的角度谈代码重构时,更多地从问题抽象层面思考,而不是简单地从纯代码层面剥离内部类(AsyncTask、BaseAdapter 等)。如果你真的想简化你的代码,可以考虑使用超级Activity维护AsyncTask代码,这比创建AsyncTask作为单独的类要好。
标签: java android android-asynctask