问题
接入第三方sdk的时候,lua调java函数的过程中,一直返回false,-4, 即java函数出现异常,报错内容是
Can't create handler inside thread that has not calledLooper.prepare()
大概意思是在子线程中,使用了UI组件,看了下代码,发现在java函数中使用了SurfaceView
原因
quick-cocos 在 Android 上以两个线程来运行,分别是负责图像渲染的 GL 线程和负责 Android 系统用户界面的 UI 线程。lua代码是在GL线程中运行的,所以回调函数也是在GL线程中运行的,而子线程是不能刷新UI的
解决办法
在UI线程中调用就好了
public static void luaCallJavaFunc(){
AppActivity.appActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//把你的代码移到这里来就可以了
}
}
本文解析了在使用Lua调用Java函数过程中返回false,-4的原因,并给出了解决方案。问题出现在尝试从非UI线程更新Android UI组件时,具体表现为在Lua环境中调用Java函数时触发异常Can't create handler inside thread that has not called Looper.prepare()。文章提供了正确的调用方式,即通过runOnUiThread确保在UI线程中执行涉及UI操作的代码。

4万+

被折叠的 条评论
为什么被折叠?



