2011-11-10 43 views
0

我正在开发一个应用程序,该应用程序具有将调用转发到Web服务的服务以及一些放置这些调用的活动。这些活动需要处理这些调用的结果。例如,我在服务上有一个writeComment方法,它访问Web服务并返回有关新写入的注释的一些信息。从活动调用冗长的服务方法 - 最佳实践

现在我让活动负责所有的线程。该活动绑定该服务,然后使用调用绑定服务的writeComment方法的AsyncTask。

只要活动在AsyncTask运行时没有停止,所有工作都会正常进行。如果确实如此(在翻转手机时很容易发生),那么当尝试更新onPostExecute中的UI时,AsyncTask就会死亡。我不完全确定如何解决这个问题 - 我需要让用户知道服务器已经更新。

如果我反过来注册一个回调服务,我仍然有点残缺,因为我需要通知服务Activity已经改变 - 我需要告诉它不要通知我第一个Activity的onDestory,并在第二个Activity的onCreate中重新注册。我需要处理异步任务在onDestroy之后和onCreate之前完成的情况。

在这种情况下什么被认为是最佳实践?

谢谢, Itay。

回答

1

我的直觉告诉我让服务处理线程。与活动相比,服务的短暂性(尽管在某种程度上仍然是短暂的)要少得多,因此您尝试与不再存在的Context(不管它是活动还是服务)进行交互的线程问题会更少。你看过IntentService课吗?它为你处理了很多线程。

+0

IntentService的确处理线程,但它不处理回调。 – zmbq

1

在我的应用程序中,我有一个长期运行的服务和需要在服务中呈现数据的活动。当服务发生变化时,该服务还会对活动进行调整,但活动也可以查询该服务。我接近这个方式是双重的。

首先,我将我的活动绑定到服务,以便将活动的消息发送到服务。

其次,服务使用广播发送通知,活动监听这些广播。我在Activity onResume中设置了它,并在onPause中将其拆除。我认为这是你错过的部分。

+0

是的,它可能是。我将不得不一直玩这个。我对AsyncTask非常不满,似乎它只适用于你不关心的任务。 – zmbq