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可以被持久化(字符串)。 –