Boy of chinas

Results 5 comments of Boy of chinas

newThread()是luastate对象的一个方法,就是复制一份原有的luastate再添加到states列表上去。用了newThread()方法,感觉是有线程的感觉了(线程函数里面放一个死循环代码,然后点击按钮,可以正常触发按钮的点击事件,不用newThread()的话,UI线程会阻塞,按钮都点不。但是死循环里面的sleep()函数还是会阻塞UI线程,按钮按得快的话,app还会直接闪退)。我是用lua调用android的api做界面。

我最开始就是你这个思路,实现的时候就有问题了。lua栈只有一个,如果java线程里面一直调用lua栈里面的一个函数,就会一直把函数和参数push到栈上。我按下按钮出发按钮点击事件的时候里面也是调用一个lua函数,这个函数和参数也会push到栈上,就和线程里面的冲突了,我估计是这样所以造成了app闪退

我测试了一下,newThread方法,返回的lua栈指针和原lua栈指针是一样的,也就是说newthread方法并不是深拷贝一份lua栈,所以我用了newthread还是会出现问题,用上线程锁可以解决这个问题,但是这个线程是个假的线程,因为用sleep()还是会阻塞UI线程。而且newthread方法只能用一次,用两次,也就是我想在开两个线程,app直接闪退。 还有lua函数和Java函数互相多层调用也有问题,比如: ```lua --B开头的是Java封装的函数 --A开头的是lua函数 function A() B(function() B2() end ) end A() ``` Java里面是用pcall或者call方法调用。 运行的结果就是logcat缓存爆表,app进程死掉。 ```lua B(function() B2() end ``` 这样就没有问题。

lua有补全吗?怎么用