Chenhe

Results 28 comments of Chenhe

lua 没有 sleep 的完美方案。我也是苦恼了很久。一个变通办法是利用 callback,具体代码见 demo 里的 callback。 谁有更好的方案欢迎补充~

没看懂你的 `L.newThread();` 函数是哪来的。 可以参考 demo 工程中的[代码](https://github.com/liangchenhe55/Android-Lua/blob/master/app/src/main/java/cc/chenhe/lib/androidlua/demo/AsyncJavaFunction.java) 只需把 AsyncTask 换成原生的 Thread 即可。

我没注意 LuaState 有这个方法。原则上来讲 Lua 不支持多线程。 所以我的方案上在 Java 里开启一个新线程,然后在这个线程中执行 Lua 函数。 可以把 Lua 函数作为参数传递给 Java,上面提到的代码已经写的很明白了。

我大概了解了一下,LuaState 并不是线程安全的,所以我的方案有潜在风险。你的使用场景应该就触发了这种问题。 而你提到的 `newThread ` 方法实际上是创建一个新的栈,如果把这个栈用于另一个线程,自然也就没了多线程共享栈导致的问题。但具体来讲还有许多工作要做,相关的函数包括 `resume`, `yield`, `lock`, `unlock` 等。 我没研究过 lua 多线程的问题,目测也不属于此 lib 封装的问题。这个 issue 暂时保留以供讨论。

可以,需要将 java 函数包装为一个类注入进去,请参见 README [Lua 调用 Java 函数 ](https://github.com/liangchenhe55/Android-Lua#lua-%E8%B0%83%E7%94%A8-java-%E5%87%BD%E6%95%B0)章节。

抱歉,我不太清楚关于调试的问题。这个项目只是原样封装 Lua 的 C API,并不做功能拓展。你可以去文档查询相关功能,然后在寻找对应的 java 函数。

这个还真不清楚。有一个代替方案:注入一个 lua 函数叫 `print` 覆盖标准库函数,将其绑定到 Android 的 Log.* 函数。

抱歉这个还真不太清楚,要不你去查一下 lua-C api 文档

Lua 栈仅仅是 Lua 与 java 的桥梁。Lua 是独立运行的,关闭栈不能结束正在执行的 lua 进程。 你也不应该强制结束 lua 进程(正如你不应该强制结束 java 进程一样)以免进入未定义的状态。 建议在 lua 中留一个接口,让 lua 自己结束任务。

传一个 Lua table 进来。然后在 java 端转成 java list。参阅[遍历 Lua 表(数组)](https://github.com/liangchenhe55/Android-Lua/#%E9%81%8D%E5%8E%86-lua-%E8%A1%A8%E6%95%B0%E7%BB%84)