LuaJavaBridge 经典错误(函数异步回调引用失效)

简介: LuaJavaBridge  利用C++作为中介来实现整个过程,例如:lua--C++--java ,java--C++--lua。

“Lua 虚拟机中,Lua function 以值的形式保存。但这个值无法直接给 Java 用,所以 luaj 做了一个 Lua function 引用表。当一个 Lua function 传递给 Java 时,这个 function 对应的值会被存在引用表中,并获得一个唯一的引用 ID (整数)。Java 代码拿到这个引用 ID 后,就可以很方便的调用该 Lua function 了。” 

“Lua 虚拟机具有自动垃圾回收机制。Lua function 既然是值,那么在没有被使用时自然会被回收掉。所以 luaj 提供了 retainLuaFunction() 和 releaseLuaFunction() 两个函数用于增减 Lua function 的引用计数。

将一个 Lua function 以引用 ID 的形式传入 Java 时,luaj 会自动增加引用 ID 的计数器,所以在 Java 方法里可以放心的异步调用 Lua function。但在不需要使用该 Lua function 后,一定要调用 releaseLuaFunction() 减少该引用 ID 的计数器。当计数器为 0 时,会自动释放该 Lua function。

问题重现:当前项目登录模块儿采用的是先去微信授权然后异步回调请求微信登录 截图如下

​​​​

LuaJavaBridge 经典错误(函数异步回调引用失效)_第1张图片

LuaJavaBridge 经典错误(函数异步回调引用失效)_第2张图片

LuaJavaBridge 经典错误(函数异步回调引用失效)_第3张图片

然后我们该代码判断了是否为空因为异步回调的函数绑定已经release了lua端进行垃圾回收所以self引用也就失效了然后return下面函数不会执行

参考文章 https://www.cnblogs.com/jsfx/p/5508754.html

你可能感兴趣的:(Lua)