Mvvmcross.plugin.ble zagotavlja varnost niti za delovanje Bluetooth z nizko energijo (BLE) predvsem s skrbnim ravnanjem z asinhronimi operacijami in spoštovanjem smernic, specifičnih za platformo. Tu je podroben pregled, kako doseže varnost niti:
1. zaporedna izvedba ukazov BLE **
Mvvmcross.plugin.ble poudarja pomen izvajanja ukazov BLE zaporedno, zlasti na Androidu. To pomeni, da čakam, da se ena operacija konča, preden začne drugo. Ta pristop pomaga preprečiti napake GATT, ki se lahko pojavijo, ko se ukazi izvajajo hkrati brez ustrezne sinhronizacije [1].2. Uporaba glavne niti **
Za nekatere operacije, kot so značilnosti pisanja, je ključnega pomena, da ta dejanja izvajate iz glavne niti. To je še posebej pomembno pri Androidu, kjer tega ne uspe, lahko povzroči Gattwriteerror [1]. Z zagotavljanjem, da se takšne operacije izvajajo na glavni niti, se vtičnik izogne morebitnim težavam z navojem.3. Izogibanje predpomnjenju značilnih ali storitvenih primerov **
Ko je naprava prekinjena, postanejo vsi servisni in značilni primeri neveljavni. Za ohranitev varnosti niti, mvvmcross.plugin.ble svetuje, da se te primere predpomnijo med sejami povezave. Namesto tega priporoča uporabo `getServiceasync` in` getCharacteristicasync`, da dobite veljavne primerke vsakič, ko se vzpostavi povezava [1].4. Ravnanje napak **
Vtičnik spodbuja okoliške asinhrone klice BLE API s poskusnimi bloki. Ta praksa pomaga ujeti izjeme, ki se lahko pojavijo med operacijami BLE, ki so lahko pogoste zaradi narave komunikacije Bluetooth. Pravilno ravnanje z napakami zagotavlja, da aplikacija ostane stabilna, tudi če se sooča s nepričakovanimi težavami [1].5. Platform-specifični pomisleki **
Mvvmcross.plugin.ble je zasnovan tako, da deluje na več platformah, vključno z Android, iOS in MacOS. Upošteva omejitve in najboljše prakse, specifične za platformo, na primer izogibanje skeniranju med izvajanjem drugih BLE operacij, da se čim bolj zmanjšajo odtok baterije in izboljšajo splošno delovanje [1].6. Uporaba lenih inicializiranih singletonov **
V kontekstu MVVMcross se vtičnik registrira `ibluetoothle` in` iadapter` kot leni inicializirani singletoni. Ta pristop omogoča enostavno vbrizgavanje in reševanje teh storitev, pri čemer zagotavlja, da se v življenjskem ciklu aplikacije pravilno inicializirajo in upravljajo [1] [10].Z upoštevanjem teh smernic in najboljših praks mvvmcross.plugin.ble razvijalcem pomaga zagotoviti varnost in zanesljivost niti v svojih aplikacijah, ki podpirajo BLE. Vendar je za razvijalce ključnega pomena, da razumejo osnovno tehnologijo BLE in njene omejitve za učinkovito uporabo vtičnika in se izognejo skupnim pasti [11].
Navedbe:[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://learn.microsoft.com/en-us/answers/questions/1518375/which-package-hould-i-utIle-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/isissue/524
[7] https://stackoverflow.com/questions/38922639/how-could-i-achieve-maximum-thread-safety-with-a-bread-Write-ble-gatt-characteris
[8] https://github.com/xabre/xamarin-bluetooth-le/isissue/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_no_good_crossplatform_bluetooth/