ANativeWindow_fromSurface(env,surface) 总是 returns null

ANativeWindow_fromSurface(env,surface) always returns null

我正在尝试将表面从片段传递到我的本机代码。

但是当我使用 ANativeWindow_fromSurface(env,surface);

创建时,ANativeWindow 始终为 null

我正在使用 kotlin 而不是 java。

我从片段中的 onViewCreated() 函数调用本机函数:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    

    surfaceView  = view.findViewById(R.id.surfaceView)
    surface = surfaceView.holder.surface

    myClass = MyClass()
    myClass.myFunction(surface)
 
}

我的class:

class MyClass{

init {
    System.loadLibrary("nativeLib")
}

external fun myFunction(surface: Surface): Int

}

这是我的 native.cpp :

extern "C"
JNIEXPORT jint JNICALL
Java_com_my_app_MyClass_myFunction(JNIEnv *env,jobject obj,jobject surface){


nativeWindow = ANativeWindow_fromSurface(env,surface);

if(nativeWindow == nullptr){
    ALOG("nativeWindow is null");
    return -1;
}

}

当我安装我的应用程序时,它显示 nativeWindow 为空。 为什么它是空的? 谁能建议我解决这个问题?

终于找到解决办法了!!

我将 myClass.myFunction() 调用移动到 SurfaceHolder.Callback{} 。

现在看起来像这样:

override fun surfaceCreated(p0: SurfaceHolder) {

    object : Thread(){
        override fun run() {
            myClass.myFunction(surface)
        }
    }.start()

}