我的问题是,假设我有一个带有单例的c ++类,并且通过JNI方法调用了这个单例,每次我从java调用到c ++时,单例变量是否因为其静态而更改了,还是保持不变?每次我从Java调用C ++时,它是否在新线程上运行该方法,还是没有?
示例代码:
在Java中:
class NativeLib
{
public native void updateFrame();
}
在C / C ++中:
JNIEXPORT void JNICALL Java_com_Company_NativeLib_NativeLib_updateFrame()
{
sceneManager::getInstance()->updateFrame();
}
由于每个实例的静态变量,scenerManager :: getInstance()会返回新实例还是最新创建的实例?
我在android中遇到的主要问题是我的应用程序崩溃了,却没有显示任何logCat信息,为什么它崩溃了。
但是如果我评论了sceneManager :: getInstance()-> updateFrame(); ,它永远不会崩溃,所以我认为每当Java调用C ++时,它就在一个新线程中,这意味着静态变量不会
将VM视为应用程序已调用的C / C ++代码库。有时它会回调您的代码。
单例将不会重新创建-只是一个方法调用。Dalvik VM线程只是pthread,执行Java语言代码的本机调用的任何线程都是执行C ++代码的线程。
最好的选择是附加一个本机调试器。FWIW,在logcat中不执行任何操作而崩溃的一种方法是使本机递归溢出堆栈。另一种方法是更改SIGSEGV / SIGBUS和朋友的信号处理程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句