我正在开发一个带有服务的应用程序,该服务可以将呼叫转发给Web服务,以及一些用于调用这些呼叫的活动。活动需要处理这些调用的结果。例如,我在服务上有一个writeComment方法,它访问Web服务并返回有关新写评论的一些信息。
现在我让Activity负责所有线程。 Activity绑定服务,然后使用调用绑定服务的writeComment方法的AsyncTask。
只要在AsyncTask运行时没有停止Activity,一切正常。如果确实如此(在翻转手机时很容易发生),AsyncTask在尝试更新onPostExecute中的UI时会死于暴力。我不完全确定如何解决这个问题 - 我做需要让用户知道服务器已经更新。
如果我反过来,并在服务中注册回调,我仍然有点残障,因为我需要通知服务活动已经改变 - 我需要告诉它不要通知我第一个Activity的onDestory,并在第二个Activity的onCreate中重新注册。我需要处理异步任务在onDestroy之后和onCreate之前完成的情况。
在这种情况下,什么是最佳实践?
谢谢, 伊泰。
答案 0 :(得分:1)
我的直觉告诉我让服务处理线程。服务远不像活动那么短暂(尽管在某种程度上仍然是暂时的),因此您将尝试与不再存在的上下文(无论是活动还是服务)进行交互的线程问题更少。你看过IntentService班了吗?它为您处理了很多线程。
答案 1 :(得分:1)
在我的应用程序中,我有一个长期运行的服务和需要在服务中呈现数据的活动。当有更改时,该服务还会对活动进行ping操作,但Activity也可以查询服务。我接近这个的方式是双重的。
首先,我将活动绑定到服务,以便将消息从Activity发送到服务。
其次,服务通过广播发送通知,并且活动侦听这些广播。我在Activity onResume中设置了它并在onPause中将其拆除。我认为这是你失踪的部分。