本文介绍了Android JNI C ++代码始终获得“相同"的字样. 2个不同SurfaceView对象的jobject值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Android JAVA代码中:

In Android JAVA code:

public native int addRenderer(int channel, Object glSurface);

Context context = getApplicationContext();
SurfaceView svRemotePartyA = new SurfaceView(context);
SurfaceView svRemotePartyB = new SurfaceView(context);

addRenderer(0, svRemotePartyA);
addRenderer(1, svRemotePartyB);

在Android JNI C ++代码中:

In Android JNI C++ code:

extern "C" jint JNIEXPORT JNICALL Java_addRenderer(
    JNIEnv* jni, 
    jobject j_vie, 
    jint channel,
    jobject surface) {

    LOG(LS_INFO) << "Java_addRenderer(): surface=" << surface;
    // some processing
}

运行程序时,我总是阅读以下日志!两个SurfaceView对象在JNI C ++代码日志输出中具有相同的值:

When I run the programme, I always read the following log! both SurfaceView object have same value in JNI C++ code log output:

(render_manager.cc:175): Java_addRenderer(): surface==0xbeed6120
(render_manager.cc:175): Java_addRenderer(): surface==0xbeed6120

出什么问题了?

推荐答案

您查看的是本地引用,切勿在同一JNI方法的上下文之外使用它.如果您获得该工作项目的全球参考,您将获得2个不同的项目.

You look at local references, which should never be used beyond the context of the same JNI method. If you get a global reference for this jobject, you will get 2 different ones.

这篇关于Android JNI C ++代码始终获得“相同"的字样. 2个不同SurfaceView对象的jobject值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 05:46