MVVMCROSS.PLUGIN.BLE은 비동기 작업을 신중하게 처리하고 플랫폼 별 지침을 준수함으로써 주로 BLUETOOTH 저에너지 (BLE) 작업에 대한 스레드 안전을 보장합니다. 다음은 스레드 안전을 달성하는 방법에 대한 자세한 개요입니다.
1. BLE 명령의 순차적 실행 **
mvvmcross.plugin.ble은 특히 Android에서 SEREDSINGLY를 순차적으로 실행하는 것의 중요성을 강조합니다. 이것은 다른 작업을 시작하기 전에 한 작업이 완료되기를 기다리는 것을 의미합니다. 이 접근법은 적절한 동기화없이 명령이 동시에 실행될 때 발생할 수있는 GATT 오류를 방지합니다 [1].2. 메인 스레드 사용 **
쓰기 특성과 같은 특정 작업의 경우 기본 스레드에서 이러한 작업을 수행하는 것이 중요합니다. 이것은 안드로이드에서 특히 중요하며, 그렇게하지 않으면 gattwriteerror [1]를 초래할 수 있습니다. 이러한 작업이 기본 스레드에서 실행되도록함으로써 플러그인은 잠재적 인 스레딩 문제를 피합니다.3. 특성 또는 서비스 인스턴스의 캐싱 피하기 **
장치가 분리 된 후 모든 서비스 및 특성 인스턴스가 유효하지 않습니다. 스레드 안전성을 유지하기 위해 MVVMCross.plugin.ble은 연결 세션간에 이러한 인스턴스를 캐싱하는 것에 대해 조언합니다. 대신,`getserviceasync`와`getcharacteristicasync`를 사용하여 연결이 설정 될 때마다 유효한 인스턴스를 얻는 것이 좋습니다 [1].4. 오류 처리 **
이 플러그인은 Try-Catch 블록으로 비동기식 BLE API 호출을 둘러싼 것을 권장합니다. 이 관행은 BLE 작업 중에 발생할 수있는 예외를 포착하는 데 도움이되며, 이는 블루투스 커뮤니케이션의 특성으로 인해 일반적 일 수 있습니다. 적절한 오류 처리는 예상치 못한 문제에 직면 할 때에도 응용 프로그램이 안정적으로 유지되도록합니다 [1].5. 플랫폼 별 고려 사항 **
mvvmcross.plugin.ble은 Android, iOS 및 MacOS를 포함한 여러 플랫폼에서 작동하도록 설계되었습니다. 배터리 배수를 최소화하고 전반적인 성능을 향상시키기 위해 다른 BLE 작업을 수행하는 동안 스캔을 피하는 것과 같은 플랫폼 별 한계 및 모범 사례를 고려합니다 [1].6. 게으른 초기 싱글 톤 사용 **
MVVMCross의 맥락에서 플러그인은 'iBluetoothle'및 'iadapter'를 게으른 초기화 된 싱글 톤으로 등록합니다. 이 접근법은 이러한 서비스를 쉽게 주입하고 해결할 수있게하여 응용 프로그램의 수명주기 내에서 올바르게 초기화되고 관리되도록합니다 [1] [10].이러한 지침 및 모범 사례를 따르면 MVMCROSS.PLUGIN.BLE은 개발자가 BLE 지원 애플리케이션에서 스레드 안전 및 안정성을 보장 할 수 있도록 도와줍니다. 그러나 개발자가 플러그인을 효과적으로 활용하고 일반적인 함정을 피하기위한 기본 BLE 기술과 그 한계를 이해하는 것이 중요합니다 [11].
인용 :[1] https://www.nuget.org/packages/mvvmcross.plugin.ble/
[2] https://learn.microsoft.com/en-us/answers/questions/1518375/ whith-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-le-mvmcross-plugins-ble
[6] https://github.com/xabre/xamarin-bluetooth-le/issues/524
[7] https://stackoverflow.com/questions/38922639/how-could-i-acime-maximum-thread-safety-with-a--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/