网络服务需要返回回调

时间:2010-10-06 07:38:45

标签: android static instance threadpool android-intent

我有一个网络服务,我想用作服务。它是一个本地服务,因为一旦应用程序进程停止并且没有其他应用程序需要访问它,它就不再有效了。(或者应该......)。

我在考虑是否使用IBinder接口与本地引用类,并决定暂时不使用。

我有以下问题:

  1. 如果服务死了,我知道它可以在请求处理期间,这对我来说是一个问题,首先我已经看到它,过程不会死,直到网络请求返回(然后线程优雅地死亡),除非杀死 - 在进程中使用了9 ...然后我不确定android对连接做了什么。我不确定我应该采取什么方法。(即使这是一个本地线程而不是服务,它也是如此......)
  2. 如果我希望服务监听回调并在网络处理完成后调用它,我遇到了问题,没有实例可以使用Intents传递。所以我需要一些其他解决方案,所有这些对我来说听起来都不好:A。使用IBinder来获取网络服务类的实例然后我可以调用其中一个方法并传递一个实例,这将起作用,因为它们都是在同一个进程中运行,但是要求我使用Async方式获取一个不太适合我的网络实例。 B.在我可以访问的服务中使用静态成员,那么我需要服务的内容是什么? C.使用意图仅向服务发送参数,服务将组成一个请求并将其放入队列,然后一旦完成将使用意图发送响应,该响应将封装响应(可能很长!)和还将包含调用类的名称作为字符串,以便所有接收器都知道它是否适合它们 - 在Intent中封装数据的大量开销,并在所有接收器中搜索正确的接收器以获得响应。
  3. 我不想将该服务用作本地运行的简单线程,因为我害怕如果我将在root活动中运行它,我将不得不使用静态容器,因此它将在每个活动中可见,如果由于某种原因,root将被销毁,即使我开始新的任务并且该过程仍然存在,它将接受所有服务...

    任何人都有一些关于如何处理这件事的好主意?

1 个答案:

答案 0 :(得分:0)

最终我放弃了这项服务。 不使用服务的原因但是为了扩展Application对象并将网络类保持为该Application对象的成员,它在创建应用程序时,在创建任何活动之前启动,并在应用程序绘制它之前关闭它。最后一口气。我知道应用程序onTerminate可能不会一直被调用,但是如果有人在我的应用程序上调用kill -9或者等效的程序,并且进程将死于使用它杀死应用程序,我已经设置为我的服务将被销毁。 我放弃服务的原因是:

  1. 我可以在应用程序生命周期中保持工作线程运行。
  2. 由于我已经和未来的计划将只有一个应用程序,它将来仍然可以使用。
  3. 由于它没有连接并且从任何特定的活动开始,它不会受到他们的死亡或他们的创作的影响。
  4. 它的上下文将持续应用程序的生命周期,因此我可以使用它来使用意图来广播事件。
  5. 当应用程序死亡时,我的服务随之消失。除非kill -9然后系统将杀死与应用程序相关的所有线程,包括我的,所以我仍然很好。
  6. 每个活动都可以使用getApplication()并强制转换为我的Application对象并获取服务。
  7. 所以不需要使用绑定并使我的代码复杂化,不需要考虑如何启动或结束服务,如果我提供服务,我最有可能从应用程序启动它(或者根活动),所以我认为对我和我的应用程序来说这是最好的选择。