Estoy escribiendo una aplicación que básicamente es un contenedor alrededor de 250K JNI. El JNI (un motor de juego) tiene API como handle_penUp (int x, int y). Algunas veces necesita consultar al usuario desde dentro handle_penUp() (a través de devoluciones de llamada en código Java), por lo que el diálogo que utilizo para implementar la consulta debe bloquear.Cuadro de diálogo de bloqueo desde el código JNI
Entiendo que el hilo principal de ejecución no puede bloquear. Así que he generado un segundo hilo que realiza todas las llamadas JNI que pueden dar lugar a devoluciones de llamadas que deberían bloquearse. Dentro de ese segundo hilo, cuando necesito poner un diálogo de bloqueo, llamo a startActivityForResult() y luego a acquire() en un semáforo. Cuando se llama a onActivityResult() en el hilo principal, se llama a release() en el mismo semáforo.
Esto funciona si mi consulta se implementa como una nueva actividad, pero no si quiero mostrar el diálogo() dentro de la actividad existente. Los mensajes de registro me dicen que mi hilo necesita un Looper. Agregaré uno y anexaré información sobre si funciona, pero parece que voy por el camino equivocado. Lo que necesito es una receta para hacer diálogos de bloqueo (útil solo porque cada otra plataforma los tiene y por lo tanto el código portado funcionará de esa manera.)
probablemente bloque como en el bloqueo frente a no bloquear io (la llamada no se devuelve hasta ha obtenido la entrada solicitada o ha fallado, versus haber regresado inmediatamente e informar cualquier entrada si alguna ya estaba en un buffer) –