我希望更好地了解如何构建Android应用,其中活动会触发API调用(例如)。
我目前通过将API调用放入AsyncTask子类来实现它,向它传递对活动的引用,以便它可以更新onPostExecute中的UI。但我的直觉是,这会产生过度耦合的代码。
我想知道是否应该将这样的API调用放入service,并使用BroadcastReceiver来更新活动。
你说什么,AsyncTask或BroadcastReceiver?
答案 0 :(得分:4)
我通常会关注本地服务pattern。我强烈怀疑这是官方Twitter应用程序的工作方式,这是大多数Google应用程序使用的模式。这也解决了您的应用程序在任务完成之前消失(被杀或进入后台)的问题,或者在后台任务期间手机切换配置的问题。
答案 1 :(得分:2)
BroadcastReceiver和服务是一个开销。对Web服务的请求不应该很长。下载文件或类似文件时,服务是适当的。
AsyncTask方式在这里是正确的。但我建议您显示一个进度对话框,让用户知道您的应用程序没有冻结,但做了一些有用的工作。
请参阅示例here。
答案 2 :(得分:1)
AsyncTask就好了。您唯一需要担心的是使用WeakReference引用Activity以避免整个Activity被内存泄漏。如果你使用观察者或事件模式,它不是过度耦合的代码。
答案 3 :(得分:0)
只有在电话需要很长时间的情况下我才会使用服务,这样用户可以在完成后离开应用。
如果任务足够短,我会使用AsyncTask,如果在UI线程中完成,它几乎不会出现ANR。
(免责声明:我认为自己是初学者,我期待更有经验的人的评论)