在android和delphi tokyo下(所以只有一个单独的UI线程)我创建了一个OnFrameAvailableListener,并以这种方式将它分配给surfaceTexture:
fSimpleExoPlayer.stop;
fSimpleExoPlayer.clearVideoSurface;
fSimpleExoPlayer.release;
fSimpleExoPlayer := nil;
fSurfaceTexture.setOnFrameAvailableListener(nil);
fSurface.release;
fSurface := nil;
fSurfaceTexture.release;
fSurfaceTexture := nil;
freeAndNil(FOnFrameAvailableListener);
当我完成所有事情后,我就这样摧毁它:
02-01 22:14:28.525: E/Error(12933): Invoke error: method 'onFrameAvailable' not found
02-01 22:14:28.525: E/Error(12933): At address: $8AA6382B (Androidapi.Jnibridge.dispatchToNative(JNINativeInterface**, Androidapi.Jni._JNIObject*, Androidapi.Jni._JNIObject*, Androidapi.Jni._JNIObject*, Int64) + 902)
问题是 AFTER 我摧毁了一切,很少,我收到这个错误:
^(?=(?:\w+ \w+)).*\K\b\w+
所以Java中的东西仍然试图调用OnFrameAvailableListener甚至之后我发布了所有东西:(我认为在Java下它有自己的ARC我们从来没有真正释放任何对象这不是真正的问题和OnFrameAvailableListener即使在我们发布所有内容之后仍然可用,但在delphi下,即使我不执行freeAndNil(FOnFrameAvailableListener);编译器也会将它的引用计数减少为0,从而释放它:(
那我该怎么办?