我正在编写一个应用程序,它基本上是一个250K JNI的包装器.JNI(游戏引擎)具有handle_penUp(int x,int y)等API.有时它需要从handle_penUp()内部查询用户(通过回调到Java代码),因此我用来实现查询的对话框必须阻止.
据我所知,执行的主线程无法阻止.所以我已经产生了第二个线程,它使得所有可能导致需要阻塞的回调的JNI调用.在第二个线程中,当我需要建立一个阻塞对话框时,我调用startActivityForResult()然后在信号量上获取().当onActivityResult()在主线程上被调用时,它在同一个信号量上调用release().
如果我的查询是作为一个新的Activity实现的,那么这是有效的,但如果我想在现有的Activity中使用showDialog(),则不行.日志消息告诉我我的线程需要一个Looper.我正在添加一个 - 并将附加有关它是否有效的信息 - 但感觉好像我在这里走错了路.我需要的是一个阻塞对话框的配方(如果只是因为每个其他平台都有它们,那么很有用,因此移植代码通常会以这种方式工作.)