Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon mvvmcross.plugin.ble은 BLE 작업에 대한 스레드 안전을 보장하는 방법


mvvmcross.plugin.ble은 BLE 작업에 대한 스레드 안전을 보장하는 방법


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/