2011-11-18 59 views
0

我有一个Android服务在与客户端不同的进程中运行,并且只在客户端连接时才运行。我想知道在它的生命周期中究竟是否接受来自客户端的请求?Android服务在其生命周期中何时可用?

我在服务生命周期的早期/晚期发出请求时遇到问题。据我所知,每个请求都是在与主Service线程分开的线程中处理的。我有以下问题:

  • 请求由服务在Service.onCreate()之前或期间处理。我已经看到尝试使用在我的Service.onCreate()中初始化的资源的异常,但它们为空,并且日志记录证实主Service线程位于onCreate()中。
  • 请求在Service.onDestroy()期间或之后由服务处理。异常和日志记录再一次证实一个线程正在处理请求并尝试使用已经在onDestroy()中释放的资源。

Android可以允许对未完全初始化或销毁的服务发出请求吗?

+0

你试过使用隐式意图吗? – 2011-11-18 13:58:02

+0

尝试利用主线程中的所有功能。创建一个单独的线程会给你记忆问题。在异步任务中启动您的服务,然后在PreExecute上启动您的服务。你可以在PostExecute上停止你的服务,但这是根据你的程序的功能 – 2011-11-18 13:59:54

+0

你的问题是相当误导。无论何时客户发送相应的意图或与其绑定,服务就是或者变得“可用”。 * Thread *的生存时间应该由服务来控制 - 反之亦然。当服务尚未创建时,工作线程如何处理请求? – JimmyB

回答

1

我有一个Android服务在一个单独的进程中运行,从它的客户端

请不要这样做,除非这些流程代表不同的应用程式。

我想知道在它的生命周期中究竟是否接受来自客户端的请求?

“请求”是一个没有意义的术语。我假设通过“请求”您的意思是“调用由服务发布的Binder暴露的方法”。

据我所知,每个请求都是在与主Service线程分离的线程中处理的。

对线程池中的线程调用对由Binder公开的方法所做的调用,它与主应用程序线程分开。它是Android中Android的几个地方之一,Android可以从单独的线程调用您的代码。

请求在Service.onCreate()之前或期间由Service处理。

这应该是不可能的,因为onBind()将不会被调用,所以没有Binder。没有什么可以提出“请求”。

的请求由服务期间或Service.onDestroy()

我不能排除这种可能性后处理。我认为在调用onDestroy()之前,Android会拆除IPC接口。

这就是为什么我想知道服务在哪个阶段被认为“可用”。

当客户的ServiceConnectiononServiceConnected()调用时,它是“可用的”。如果服务不存在,将在onCreate()onBind()之后发生。