Android应用程序架构 - 在哪里放置REST API调用代码?

时间:2011-03-04 14:18:29

标签: android android-activity android-asynctask broadcastreceiver

我希望更好地了解如何构建Android应用,其中活动会触发API调用(例如)。

我目前通过将API调用放入AsyncTask子类来实现它,向它传递对活动的引用,以便它可以更新onPostExecute中的UI。但我的直觉是,这会产生过度耦合的代码。

我想知道是否应该将这样的API调用放入service,并使用BroadcastReceiver来更新活动。

你说什么,AsyncTask或BroadcastReceiver?

4 个答案:

答案 0 :(得分:4)

我通常会关注本地服务pattern。我强烈怀疑这是官方Twitter应用程序的工作方式,这是大多数Google应用程序使用的模式。这也解决了您的应用程序在任务完成之前消失(被杀或进入后台)的问题,或者在后台任务期间手机切换配置的问题。

答案 1 :(得分:2)

BroadcastReceiver和服务是一个开销。对Web服务的请求不应该很长。下载文件或类似文件时,服务是适当的。

AsyncTask方式在这里是正确的。但我建议您显示一个进度对话框,让用户知道您的应用程序没有冻结,但做了一些有用的工作。

请参阅示例here

答案 2 :(得分:1)

AsyncTask就好了。您唯一需要担心的是使用WeakReference引用Activity以避免整个Activity被内存泄漏。如果你使用观察者或事件模式,它不是过度耦合的代码。

答案 3 :(得分:0)

只有在电话需要很长时间的情况下我才会使用服务,这样用户可以在完成后离开应用。

如果任务足够短,我会使用AsyncTask,如果在UI线程中完成,它几乎不会出现ANR。

(免责声明:我认为自己是初学者,我期待更有经验的人的评论)