2013-10-09 23 views
2

我的服务在正在运行的过程中运行良好。即使没有显示主要活动,它也可以控制特定的广播接收机。它也会以特定的时间间隔自行启动以检查一些参数。在检测到不存在广播接收器时,我可以直接停止服务,直到注册或直接在该间隔重新启动。与此同时,该服务将以START_NOT_STICKY模式运行。将Android服务的启动状态从START_STICKY更改为START_NON_STICKY

但是,当我连接到服务并注册接收器时,是否有办法将其运行状态从START_NOT_STICKY更改为START_STICKY?或者我只需要在接收器中使用isRegistered标志,停止并重新启动服务并在onStartCommand中检查其值?这是一个很好的模式,还是有更好的?

这样做的主要原因是当应用程序不需要它时,在后台没有运行进程。

回答

0

从android开发网站Services,START_STICKY表示该服务在完成其命令后将停留,START_NOT_STICKY将在运行其命令后结束。
从你的描述你一直说你正在运行的服务,并添加一个广播接收器?无论是否有其他服务,广播接收器实际上都用于接收外部请求。广播接收器实际上是应用程序接收外部请求的第一个联系点,然后它将负责启动服务以运行任何所需的命令。就定期运行命令所需的服务而言,应根据需要根据上述服务标志的取消来启动和结束这些服务。

GCM(Google云消息传递)的示例流程。

  1. 云服务器向注册设备发送消息。
  2. 通过注册设备上的谷歌播放服务,意向被发送到注册应用程序的广播接收器。
  3. 广播接收机接收意图,将其交给执行处理所需的任何进一步命令的服务(I.E.显示通知等)。
+0

我已经有这样的工作。不同之处在于我已将接收器移至服务中,因为它已设置为受系统保护的接收器广播。这意味着你必须实际注册以代码接收它们。如果我停止服务,那么接收器也会停止。如果您将广播接收器放置在清单中,那么系统会自动在单独的进程中运行该接收器,如果您的应用程序恰好被销毁的话。 –

+0

但只是一个评论,这不是我的问题的答案。我问是否可以将服务状态从START_STICKY更改为START_NOT_STICKY。这并没有回答。 –