【发布时间】:2011-04-21 16:25:21
【问题描述】:
我有一个网络服务,我想将其用作服务。它是一个本地服务,因为一旦应用程序进程停止并且没有其他应用程序需要访问它,它就不再有效。(或应该......)。
我正在考虑是否使用 IBinder 接口和对类的本地引用,并决定暂时不使用。
我有以下问题:
- 如果服务终止,并且我知道它可以在请求处理期间终止,这对我来说是个问题,首先我看到它,进程不会终止,直到网络请求返回(然后线程正常终止),除非 kill - 9用于过程......然后我不确定android对连接做了什么。我不确定我应该在这里采取什么方法。(即使这是一个本地线程而不是服务也是如此......)
- 如果我希望服务监听回调并在网络处理完成后调用它,我遇到了问题,无法使用 Intent 传递任何实例。所以我需要一些其他的解决方案,所有我认为对我来说听起来很糟糕的解决方案: A. 使用 IBinder 获取网络服务类的实例,然后我可以调用它的一个方法并传递一个实例,这将起作用,因为它们都是在同一个过程中运行,但需要我使用异步方式来获取一个不太适合我的网络实例。 B. 在我可以访问的服务中使用静态成员,那么我需要该服务做什么? C. 使用意图仅向服务发送参数,服务将从中组成一个请求并将其放入队列中,然后一旦完成将使用意图发送响应,该意图将封装响应(可能很长!)和还将包含调用类的名称作为字符串,因此所有接收器都会知道它是否适合他们 - 在 Intent 中封装数据并在所有接收器中搜索正确的接收器以获得响应的巨大开销。
我不想将该服务用作本地运行的简单线程,因为我担心如果我要在根活动中运行它,我将不得不使用静态容器,因此它在每个活动中都是可见的,如果根会因某种原因被销毁,它会带走所有服务,即使我开始新任务并且进程仍然存在......
有人对如何处理这件事有一些好主意吗?
【问题讨论】:
标签: android static instance threadpool android-intent