And*_*use 5 java java-native-interface android android-ndk
我正在编写一个应用程序,它基本上是一个250K JNI的包装器.JNI(游戏引擎)具有handle_penUp(int x,int y)等API.有时它需要从handle_penUp()内部查询用户(通过回调到Java代码),因此我用来实现查询的对话框必须阻止.
据我所知,执行的主线程无法阻止.所以我已经产生了第二个线程,它使得所有可能导致需要阻塞的回调的JNI调用.在第二个线程中,当我需要建立一个阻塞对话框时,我调用startActivityForResult()然后在信号量上获取().当onActivityResult()在主线程上被调用时,它在同一个信号量上调用release().
如果我的查询是作为一个新的Activity实现的,那么这是有效的,但如果我想在现有的Activity中使用showDialog(),则不行.日志消息告诉我我的线程需要一个Looper.我正在添加一个 - 并将附加有关它是否有效的信息 - 但感觉好像我在这里走错了路.我需要的是一个阻塞对话框的配方(如果只是因为每个其他平台都有它们,那么很有用,因此移植代码通常会以这种方式工作.)
你绝对不想要两个 UI 线程。就控制流和显示而言(即与绘图、启动活动、显示对话框等相关的任何内容),应该只有一个线程与 Android SDK 进行通信。
另外,请记住,您并不希望实际保持线程运行 - 一切都基于事件,因此您希望代码响应某些操作,执行某些操作,然后尽快退出。
当你说“阻止”时,你到底是什么意思?需要阻止什么?如果您只是需要停止响应事件,为什么不在对话框可见时将布尔值设置为 true,并在它为 true 时忽略所有事件?
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |