기본적으로 250K JNI를 감싸는 앱을 작성하고 있습니다. JNI (게임 엔진)에는 handle_penUp (int x, int y)와 같은 API가 있습니다. 때로는 handle_penUp()에서 (자바 코드로 콜백을 통해) 사용자를 쿼리해야하므로 쿼리를 구현하는 데 사용하는 대화 상자가 차단되어야합니다.JNI 코드 내에서 대화 차단하기
주 실행 스레드가 차단 될 수 없음을 이해합니다. 그래서 모든 JNI 호출을 만들어서 차단해야 할 콜백이 발생할 수있는 두 번째 스레드를 생성했습니다. 두 번째 스레드에서 블로킹 대화 상자를 열어야 할 때 startActivityForResult()를 호출 한 다음 세마포어에서 acquire()를 호출합니다. onActivityResult()가 주 스레드에서 호출되면 동일한 세마포어에서 release()를 호출합니다.
내 쿼리가 새 액티비티로 구현되었지만 기존 액티비티 내에서 showDialog()를 사용하려는 경우에는 작동하지 않습니다. 로그 메시지는 내 스레드에 루퍼가 필요하다는 것을 알려줍니다. 나는 하나를 추가 할 것이고 그것이 작동하는지에 대한 정보를 덧붙일 것이다 - 그러나 내가 잘못된 길로 내려가는 것처럼 느낀다. 내가 필요한 것은 블로킹 대화 상자를 만드는 방법입니다 (다른 모든 플랫폼에 포함되어 있기 때문에 유용합니다).
IO 비 - 블로킹 (non-blocking) 아마 대 차단과 같이 블록 (호출이 될 때까지 반환하지 않습니다
제이슨 도움이되기를 바랍니다 요청 된 입력을 얻었거나 실패했습니다. 즉, 즉시 반환하고 버퍼에 이미있는 경우 입력을보고합니다.) –