Az mvvmcross.plugin.ble biztosítja a szál biztonságát a Bluetooth alacsony energiájú (BLE) műveletekhez, elsősorban az aszinkron műveletek gondos kezelésével és a platformspecifikus iránymutatások betartásával. Itt található egy részletes áttekintés arról, hogy miként éri el a szál biztonságát:
1. A BLE parancsok szekvenciális végrehajtása **
Az mvvmcross.plugin.ble hangsúlyozza a BLE parancsok szekvenciális végrehajtásának fontosságát, különösen az Androidon. Ez azt jelenti, hogy az egyik művelet befejezésére vár, mielőtt a másik megkezdése előtt befejeződik. Ez a megközelítés segít megelőzni a GATT hibákat, amelyek akkor fordulhatnak elő, ha a parancsokat egyidejűleg hajtják végre megfelelő szinkronizálás nélkül [1].2. Fő szálhasználat **
Bizonyos műveletekhez, például írási jellemzőknél elengedhetetlen, hogy ezeket a műveleteket a fő szálból hajtsák végre. Ez különösen fontos az Androidon, ahol ennek elmulasztása a GattWriteError -t eredményezheti [1]. Annak biztosításával, hogy az ilyen műveleteket a fő szálon végrehajtják, a plugin elkerüli a lehetséges menetes problémákat.3. Kerülje el a jellegzetes vagy szolgáltatási példányok gyorsítótárazását **
Miután egy eszközt leválasztottak, az összes szolgáltatás és jellegzetes példány érvénytelen. A szálbiztonság fenntartása érdekében az mvvmcross.plugin.ble azt javasolja, hogy ne gyorsítsák meg ezeket a példányokat a csatlakozási munkamenetek között. Ehelyett azt javasolja, hogy használja a „GetServiceAsync” és a „getCharacteristicAsync” használatát, hogy érvényes példányokat kapjon minden egyes kapcsolat létrehozásakor [1].4. Hibakezelés **
A plugin ösztönzi a környező aszinkron BLE API-hívásokat próbálkozási blokkokkal. Ez a gyakorlat elősegíti a BLE műveletek során előforduló kivételek elkapását, amely a Bluetooth kommunikáció jellege miatt gyakori lehet. A megfelelő hibakezelés biztosítja, hogy az alkalmazás stabil maradjon még váratlan problémákkal szemben is [1].5. Platformspecifikus megfontolások **
Az mvvmcross.plugin.ble -t úgy tervezték, hogy több platformon dolgozzon, beleértve az Androidot, az iOS -t és a MacO -kat. Figyelembe veszi a platformspecifikus korlátozásokat és a bevált gyakorlatokat, például elkerüli a szkennelést, miközben más BLE műveleteket hajt végre az akkumulátor leeresztésének minimalizálása és az általános teljesítmény javítása érdekében [1].6. Lusta inicializált szingletonok használata **
Az mvvmcross összefüggésében a plugin regisztrálja az „ibluetoothle” és az „iadapter” lusta inicializált szinguletteket. Ez a megközelítés lehetővé teszi ezen szolgáltatások egyszerű befecskendezését és megoldását, biztosítva, hogy azok megfelelően inicializálódjanak és kezeljék az alkalmazás életciklusában [1] [10].Ezen iránymutatások és bevált gyakorlatok betartásával az mvvmcross.plugin.ble segít a fejlesztőknek a szálak biztonságának és megbízhatóságának biztosításában a BLE-kompatibilis alkalmazásukban. A fejlesztők számára azonban elengedhetetlen, hogy megértsék a mögöttes BLE technológiát és annak korlátait, hogy hatékonyan felhasználják a pluginot és elkerüljék a közös buktatókat [11].
Idézetek:[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://learn.microsoft.com/en-us/answers/questions/1518375/which-package-sould-iilile-for-bluetooth-low-e
[3] https://community.particle.io/t/working-raound-ble-connect-deviceaddress-is---llocking-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-chieve-maximum-thread-safety-with-a-read-write-ble-characteris
[8] https://github.com/xabre/xamarin-bluetooth-le/issues/356
[9] https://devzone.nordicemi.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/