내 Android NDK 앱에서 C++ 라이브러리는 UI 스레드와 다른 스레드에서 실행됩니다. C++의 JNI 호출은 Java 클래스 Foo의 인스턴스를 생성합니다. Foo에서 메소드를 호출하기 위해 UI 스레드에서 작성된 다른 Java 객체 Bar를 갖고 싶습니다. 어떻게해야합니까?Android/Java : 다른 스레드에서 생성 된 객체의 메소드를 호출하는 방법은 무엇입니까?
난이도 보너스 : Foo에는 C++ 라이브러리에서 해당 JNI 함수를 호출하는 몇 가지 기본 메소드가 있습니다. 이러한 호출이 스레드로부터 안전한지 확인하려면 어떻게해야합니까?
어려움 보너스 2 : Bar의 메서드 중 일부는 실제로 콜백 메서드, 특히 WebViewClient를 재정의합니다. 일부 메소드의 리턴 코드는 Foo의 메소드 호출 결과에 따라 달라집니다. 따라서 Foo에 대한 호출은 즉시 발생해야합니다.
실제로 동기 결과가 스레드에서 필요로하는 전체 디자인은 악취가 날 것입니다. JNI 라이브러리가 레거시 또는 제 3자인 경우가 아니면 Foo를 UI 스레드로 이동하는 것을 고려하십시오. –
JNI를 통해 메서드가 호출된다는 사실을 무시함으로써 시작해야합니다. 스레드 안전성 문제는 사용중인 프로그래밍 언어에 크게 의존하지 않습니다. – fadden
난이도 보너스 3! 이것은 모두 개발중인 크로스 플랫폼 라이브러리의 일부입니다. 클라이언트는 주로 UI와는 다른 스레드에서 실행되는 C++ 인터페이스를 사용합니다.디자인의이 부분은 나에게 불변이고 접근 할 수 없다. 따라서 이것을 구현하는 데 따른 어려움. – djcouchycouch