0

我开发来自三个活动和一个服务构成的竹叶提取Android应用: - 第二个连接到设备 - - 第三个写的屏幕 上通信结果 - 扫描设备 第一个内的服务有一些功能连接到设备,检查连接,自动重新连接等等,这项服务是一个启动服务和绑定到每个活动(第一个应用程序启动此服务)服务和三项活动,启动服务是否正确?

在一些教程,我看过在这种情况下,使用的是未启动的服务,但是是绑定服务。但是我不知道自己,当我们在两项活动之间切换时,如果服务不是“开始”的服务,是否存在系统关闭服务的风险,因为在活动之间切换服务没有任何约束?

回答

1

两个回答你的问题 - 有一个风险,你的服务将随时停止。如果您围绕在切换活动时服务将开启的想法来设计应用程序,那么您将拥有比您需要的复杂得多的设计。

您可能会注意到,有在本例中定义的服务:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html

这项服务,因为它是写不只是一件事。它扫描一个设备,当它发现一个设备时,它会广播BluetoothDevice(这是一个Parcelable)。然后服务停止扫描。这个扫描代码可以很容易地在应用程序中。但关键是扫描关闭,BluetoothDevice通过意图传递给其他组件。

要记住一件好事,就是当您使用BLE时,您的应用程序已经与服务对话。因此定义一个新的服务来包装BLE连接是完全多余的(从技术上讲)。有多个活动绑定到一个服务与一个设备交谈......可能,但并非没有其复杂性。您将遇到的边缘案例的数量使得您的工作比仅让您的活动直接与设备对话更加有效。

希望有所帮助。

干杯。

+0

你很清楚谢谢!为所有应用程序的活动提供可能性以与相同的可调设备进行对话的最佳方式?我必须以某种方式记住对设备的引用。但在这一点上,我不明白在Android开发人员的例子中,你链接他们使用的服务..为什么他们不在活动中进行scansion? – aeroxr1

+1

该示例使用该服务来显示如何使用服务执行BLE扫描。它还显示BluetoothDevice是一个Parcelable。 –

+1

您可以将您的BluetoothDevice保存到传递给Activity.onSaveInstanceState的包中。将BluetoothDevice保存到磁盘是个不错的主意。一旦应用程序关闭,您应该认为任何BluetoothDevice无效。相反,扫描一个新的。您可以使用BluetoothLeScanner.startScan(列表,ScanSettings,ScanCallback)过滤扫描。但是UUID可以被持久化(字符串)。 –