MVVMCross.plugin.BLE zaisťuje bezpečnosť vlákna pre operácie Bluetooth Low Energy (BLE) predovšetkým prostredníctvom starostlivého zaobchádzania s asynchrónnymi operáciami a dodržiavaním pokynov špecifických pre platformu. Tu je podrobný prehľad o tom, ako dosiahne bezpečnosť vlákna:
1. Sekvenčné vykonávanie príkazov BLE **
Mvvmcross.plugin.Ble zdôrazňuje dôležitosť vykonávania príkazov BLE postupne, najmä v systéme Android. To znamená čakanie na dokončenie jednej operácie pred začiatkom inej. Tento prístup pomáha predchádzať chybám GATT, ktoré sa môžu vyskytnúť, keď sa príkazy vykonávajú súbežne bez správnej synchronizácie [1].2. Použitie hlavného vlákna **
Pre určité operácie, ako je charakteristiky písania, je dôležité vykonávať tieto akcie z hlavného vlákna. Toto je obzvlášť dôležité na Android, kde to môže mať za následok GattWriteError [1]. Zabezpečením, aby sa takéto operácie vykonávali na hlavnom vlákne, sa doplnok vyhýba potenciálnym problémom so závitom.3. Vyhýbanie sa ukladaniu charakteristík alebo inštancií služieb **
Po odpojení zariadenia sa všetky inštancie služieb a charakteristík stanú neplatnými. Aby sa udržala bezpečnosť vlákna, MVVMcross.plugin.Be radí proti ukladaniu týchto prípadov medzi reláciami pripojení. Namiesto toho odporúča použitie `getServeasync` a` getCaracteristicAsync` na získanie platných inštancií zakaždým, keď sa vytvorí pripojenie [1].4. Manipulácia s chybami **
Doplnok podporuje okolité asynchrónne hovory BLE API s blokmi skúšok. Táto prax pomáha chytiť výnimky, ktoré sa môžu vyskytnúť počas operácií BLE, čo môže byť bežné z dôvodu povahy komunikácie Bluetooth. Správne spracovanie chýb zaisťuje, že aplikácia zostane stabilná, aj keď čelí neočakávaným problémom [1].5. Úvahy špecifické pre platformu **
MVVMCross.plugin.Ble je navrhnutý tak, aby pracoval na viacerých platformách vrátane Android, iOS a MacOS. Zohľadňuje obmedzenia a osvedčené postupy špecifické pre platformu, napríklad vyhýbanie sa skenovaniu pri vykonávaní iných operácií BLE, aby sa minimalizoval odtok batérie a zlepšil celkový výkon [1].6. Použitie lenivých inicializovaných singletonov **
V kontexte MVVMCross sa doplnky registrujú `ibluetoothle` a` iAdapter` ako lenivé inicializované singletony. Tento prístup umožňuje ľahké vstrekovanie a riešenie týchto služieb, zabezpečuje, že sú správne inicializované a spravované v životnom cykle aplikácie [1] [10].Podľa týchto pokynov a osvedčených postupov spoločnosť MVVMCross.plugin.ble pomáha vývojárom zaistiť bezpečnosť a spoľahlivosť vlákien v aplikáciách podporovaných BLE. Je však dôležité, aby vývojári pochopili základnú technológiu BLE a jej obmedzenia na efektívne využitie doplnku a vyhýbanie sa bežným úskaliam [11].
Citácie:[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://learn.microsoft.com/en-us/answers/questions/1518375/which-package-should-itize-utize-for-bluetooth-mow-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-i-achieve-maximum-hread-safety-with-a-read-write-brite-brite-bat-characteris
[8] https://github.com/xabre/xamarin-bluetooth-le/issues/356
[9] https://devzone.nordicsemi.com/f/nordic-qa-a/88005/does-ncs-ble-api-api-hread-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/