3

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

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

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

4

1 回答 1

0

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

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

  1. 云服务器向已注册的设备发送消息。
  2. 通过注册设备上的 google play 服务,向注册应用程序的广播接收器发送一个意图。
  3. 广播接收器接收意图,将其交给服务,该服务执行处理所需的任何进一步命令(IE 显示通知等)。
于 2013-10-09T18:19:01.607 回答