Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 随着时间的推移,反复使用startService()向已启动的服务发送命令_Android_Android Service - Fatal编程技术网

Android 随着时间的推移,反复使用startService()向已启动的服务发送命令

Android 随着时间的推移,反复使用startService()向已启动的服务发送命令,android,android-service,Android,Android Service,我正在开发一款通过BLE(蓝牙低能耗)与嵌入式设备通信的应用程序。该应用程序允许用户通过活动发送命令。同时,应用程序需要在后台发送位置数据。即使活动在一天中多次关闭和打开,也必须不断发送位置数据 我无法将位置更新与命令请求分开。因为所有BLE传输必须由一个队列同步,以防止同时传输,这将导致数据包丢失 在阅读了官方指南()之后,我的第一个想法是使用前台服务,因为当活动结束时,服务不能终止。这对于发送位置数据很好。但是,为了发送命令,我必须在服务启动后与它通信。我读到不建议同时使用startServ

我正在开发一款通过BLE(蓝牙低能耗)与嵌入式设备通信的应用程序。该应用程序允许用户通过活动发送命令。同时,应用程序需要在后台发送位置数据。即使活动在一天中多次关闭和打开,也必须不断发送位置数据

我无法将位置更新与命令请求分开。因为所有BLE传输必须由一个队列同步,以防止同时传输,这将导致数据包丢失

在阅读了官方指南()之后,我的第一个想法是使用前台服务,因为当活动结束时,服务不能终止。这对于发送位置数据很好。但是,为了发送命令,我必须在服务启动后与它通信。我读到不建议同时使用
startService()
bindService()
,而是选择一种方法。据我所知,当引用上下文(本例中的活动)被销毁时,绑定服务可能会被销毁。所以我想绑定到服务不是我的选择

与已启动服务对话的另一种方法是使用广播发送命令,并在服务()中接收命令


但我认为一定有更好的解决办法,我错过了。每当我想发送蓝牙命令时,我想到的就是调用启动服务()。我想那会有用的。但是这是一个好的实践吗?实际上,在调用
stopService()
之前,我会在一个典型的用例中调用
startService()
几十次。。。我通读了整个指南,但忽略了方法文档中的这句话:

startService()

对该方法的每次调用都将导致对目标服务的onStartCommand(Intent,int,int)方法的相应调用,其意图如下所示这提供了一种向服务提交作业的便捷方式,而无需绑定和调用其接口。


如果有人无意中发现它,希望它能有所帮助。

您不必将服务绑定到任何东西。启动它就足够了,然后确保你打电话给startForeground。这将保持进程运行,而不会被系统终止。您不必将您的BLE代码放在服务类中,但可以将其放在任何您想要的地方