将Android服务的状态从START_STICKY更改为START_NOT_STICKY

时间:2013-10-09 11:46:47

标签: android service broadcastreceiver

我在正在运行的流程中运行良好。即使未显示主要活动,它也会控制特定的广播接收器。它也会以一定的间隔自行启动以检查一些参数。在检测到不存在广播接收器时,我可以直接停止服务,直到注册一个或者在该间隔重新启动它。与此同时,该服务将以START_NOT_STICKY模式运行。

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

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

1 个答案:

答案 0 :(得分:0)

从Android开发者网站Services开始,START_STICKY表示服务在运行完命令后会挂起,START_NOT_STICKY将在运行命令后结束。
根据您的描述,您一直在说您正在运行服务并添加广播接收器吗?广播接收器实际上用于接收外部请求,而不管任何其他服务。广播接收器实际上是应用程序接收外部请求的第一个联系点,然后它将负责启动服务以运行任何所需的命令。对于定期运行命令所需的服务,应根据上述服务标志的定义,根据需要启动和结束这些服务。

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

  1. 云服务器向已注册的设备发送消息。
  2. 通过注册设备上的Google Play服务,会向广播接收器发送已注册应用的意图。
  3. 广播接收器接收意图,将其交给服务,该服务执行处理所需的任何其他命令(I.E.显示通知等)。