Mvvmcross.plugin.ble zapewnia bezpieczeństwo gwintów operacji Bluetooth Low Energy (BLE) przede wszystkim poprzez staranne obsługę operacji asynchronicznych i przestrzeganie wytycznych specyficznych dla platformy. Oto szczegółowy przegląd tego, jak osiąga bezpieczeństwo wątków:
1. Sekwencyjne wykonywanie poleceń BLE **
Mvvmcross.plugin.ble podkreśla znaczenie wykonania poleceń BLE sekwencyjnie, szczególnie na Androida. Oznacza to oczekiwanie na zakończenie jednej operacji przed rozpoczęciem innej. Takie podejście pomaga zapobiec błędom GATT, które mogą wystąpić, gdy polecenia są wykonywane jednocześnie bez odpowiedniej synchronizacji [1].2. Główny użycie wątku **
W przypadku niektórych operacji, takich jak cechy pisania, kluczowe jest wykonanie tych działań z głównego wątku. Jest to szczególnie ważne na Androida, gdzie nieudanie tego może spowodować GattWriteError [1]. Zapewniając, że takie operacje są wykonywane w głównym wątku, wtyczka pozwala uniknąć potencjalnych problemów z gwintowaniem.3. Unikanie buforowania charakterystycznych lub serwisowych instancji **
Po odłączeniu urządzenia wszystkie instancje serwisowe i charakterystyczne stają się nieprawidłowe. Aby zachować bezpieczeństwo wątków, Mvvmcross.Plugin.ble doradza przed buforowaniem tych przypadków między sesjami połączeń. Zamiast tego zaleca użycie „getServiceasync` i` `getcharacteristicasync` w celu uzyskania prawidłowych instancji za każdym razem, gdy nawiązywane jest połączenie [1].4. Obsługa błędów **
Wtyczka zachęca do otaczających asynchronicznych połączeń API BLE z blokami próbkowanymi. Ta praktyka pomaga złapać wyjątki, które mogą wystąpić podczas operacji BLE, co może być powszechne ze względu na charakter komunikacji Bluetooth. Właściwe obsługę błędów zapewnia, że aplikacja pozostaje stabilna, nawet w obliczu nieoczekiwanych problemów [1].5. Rozważania dotyczące platformy **
Mvvmcross.plugin.ble został zaprojektowany do pracy na wielu platformach, w tym z Androidem, iOS i macOS. Uwzględnia ograniczenia specyficzne dla platformy i najlepsze praktyki, takie jak unikanie skanowania podczas wykonywania innych operacji BLE w celu zminimalizowania odpływu akumulatora i poprawy ogólnej wydajności [1].6. Użycie leniwy zainicjowane singletony **
W kontekście MVVMCROSS rejestruje wtyczki „ibluetoothle” i „iadapter” jako leniwe inicjowane singletony. Takie podejście pozwala na łatwe wstrzyknięcie i rozdzielczość tych usług, zapewniając, że są one odpowiednio zainicjowane i zarządzane w cyklu życia aplikacji [1] [10].Postępując zgodnie z tymi wytycznymi i najlepszymi praktykami, MVVMCROSS.PLUGIN.BLE pomaga programistom zapewnić bezpieczeństwo i niezawodność wątków w ich aplikacjach obsługujących BLE. Jednak deweloperzy kluczowe jest zrozumienie podstawowej technologii BLE i jej ograniczeń w celu skutecznego korzystania z wtyczki i unikania typowych pułapek [11].
Cytaty:[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://learn.microsoft.com/en-us/answers/questions/1518375/which-package-should-i-utilize-for-bluetooth-low-e
[3] https://community.particle.io/t/working-around-ble-connect-deviceaddress-is-a-blocking-call/68453
[4] https://www.nuget.org/packages/mvvmcross.plugin.ble/2.2.0-pre5
[5] https://stackoverflow.com/questions/38327176/xamarin-forms-plugins-ble-mvvmcross-plugins-ble
[6] https://github.com/xabre/xamarin-bluetooth-le/issues/524
[7] https://stackoverflow.com/questions/38922639/how-could-i-bieve-maximum-thread-safety-with-a-read-write-ble-gatt-characteris
[8] https://github.com/xabre/xamarin-bluetooth-le/issues/356
[9] https://devzone.nordicsemi.com/f/nordic-q-a/88005/does-ncs-ble-api-thread-safe
[10] https://github.com/mrozema/xamarin-bluetooth-le
[11] https://www.reddit.com/r/dotnet/comments/1bds6rj/why_there_is_no_good_crossplatform_bluetooth/