Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java webRTC本机Android应用程序是否需要特定的线程模型_Java_Android_Multithreading_Webrtc_Libjingle - Fatal编程技术网

Java webRTC本机Android应用程序是否需要特定的线程模型

Java webRTC本机Android应用程序是否需要特定的线程模型,java,android,multithreading,webrtc,libjingle,Java,Android,Multithreading,Webrtc,Libjingle,首先,我不清楚引用其他代码的链接是否合适,如果合适,我表示歉意,并希望了解对于我引用库(这些链接主要作为对相关方的引用提供)的情况,更合适的机制可能是什么 我们有一个用于android的webrtc本机应用程序,在调用peerconnectionfactory的dispose时遇到困难。当用户选择结束活动会话时,我们有一个清理例程,关闭对等连接,然后处理它(尽管关闭并非真正必要,因为对dispose的调用也会在释放其他资源(例如流和本机观察者)之前关闭连接,请参见libjingle-talk/a

首先,我不清楚引用其他代码的链接是否合适,如果合适,我表示歉意,并希望了解对于我引用库(这些链接主要作为对相关方的引用提供)的情况,更合适的机制可能是什么

我们有一个用于android的webrtc本机应用程序,在调用peerconnectionfactory的dispose时遇到困难。当用户选择结束活动会话时,我们有一个清理例程,关闭对等连接,然后处理它(尽管关闭并非真正必要,因为对dispose的调用也会在释放其他资源(例如流和本机观察者)之前关闭连接,请参见libjingle-talk/app/webrtc/java/src/org/webrtc/PeerConnection.java)。在我们的示例中,peerconnectionfactory的创建由通过runnable创建的线程执行,而工厂的处置则由主UI线程执行

这就是我们遇到问题的地方——即,当试图处理peerconnectionfactory时,应用程序崩溃

在审查与webRTC演示代码相关的帖子时(请参阅),他们似乎没有这个问题

此外,在查看对等连接工厂实现的本机代码时(请参阅中的peerconnectionfactory.cc),我们会看到对等连接工厂析构函数的工作线程的展开和删除

此外,在查看chromium webrtc问题列表时,我们发现了几个问题(例如,or 4196),这使我们相信在使用peerconnectionfactory时,需要特别注意要使用的线程/循环模型

因此,我的基本问题是,从不同的线程创建peerconnectionfactory时是否存在问题,以及管理peerconnectionfactory是否有一组特定的线程/循环要求


谢谢,

因此,事实证明,线程不是问题所在,就我所知,通过代码跟踪等等。问题在于我们有一个单独的私有类,它实现了SDPObserver、PCObserver和DataObserver以及其他一些逻辑

这样做的结果是,当对等连接初始化时,实现所有观察者(和一些其他逻辑)的类作为观察者传递,并在libjingle中记录为本机观察者,因此,调用dispose处理peerconnection会释放本机观察者,这不仅会释放PCObserver(在libjingle peerconnection.dispose()中)但因为对我们来说,它是同一个类,所有的东西都被释放了——导致了一个崩溃,而另一个类被认为仍然存在

因此,对每个观察者使用单独的私有类进行了重新处理,并正确地将适当的观察者传递给peerconnection创建(以及sdp/数据观察者,视情况而定,用于不同的调用),然后所有工作正常-dispose只释放PCObserver,一切正常