2016-03-24 114 views
4

首先需要一個特定的線程模型,我是不清楚是否適當引用鏈接到其他代碼,如果是的話道歉,並想了解一個更合適的機制可能是什麼,這種情況下,我在其中我引用了庫(這些鏈接主要是作爲參考提供給感興趣的各方)。是實現WebRTC原生Android應用

我們有一個android的webrtc原生應用程序,在調用peerconnectionfactory的處置時會遇到困難。當用戶選擇結束活動會話時,我們有一個清理例程,關閉對等連接然後處理它(儘管關閉並不是必須的,因爲在釋放其他資源之前,對dispose的調用也會關閉連接 - 例如,例如流和本地觀察者 - 請參閱libjingle-talk/app/webrtc/java/src/org/webrtc/PeerConnection.java)。在我們的例子中,peerconnectionfactory的創建是通過一個可運行的線程創建的,而工廠的處理是從主UI線程執行的。

這是我們遇到的問題 - 即試圖處置peerconnectionfactory,應用程序崩潰的時候。

就有關的WebRTC演示代碼的帖子的審查(見https://chromium.googlesource.com/external/webrtc/+/master/webrtc/examples/androidapp/src/org/appspot/apprtc),他們似乎並沒有這個問題。

此外,在查看對等連接工廠實現的本機代碼時(請參閱https://code.google.com/p/chromium/codesearch#chromium/src/third_party/webrtc/api/peerconnectionfactory.cc中的peerconnectionfactory.cc),我們將看到對等連接工廠析構函數的工作線程的解包和刪除。

此外,在回顧鉻webrtc問題列表時,我們看到幾個問題(例如,https://bugs.chromium.org/p/webrtc/issues/detail?id=3100或4196),導致人們相信需要特別注意相對於使用時使用的線程/循環模型peerconnectionfactory。

所以,我的基本問題是從不同的線程創建peerconnectionfactory時是否存在問題,並且是否存在一組用於管理peerconnectionfactory的線程/循環要求。

感謝,

回答

3

所以,事實證明,該線程不是問題,要最好的,我可以告訴通過代碼跟蹤等。問題是,我們有這樣實現的一個私有類SDPObserver,PCObserver和DataObserver以及其他一些邏輯。

這樣做的結果是,當對等連接初始化時,實現了所有觀察者(以及其他一些邏輯)的類作爲觀察者傳遞,並作爲本地觀察者記錄在libjingle中,因此,調用來處理對等連接導致釋放原生觀察者,導致不僅PC_bserver被釋放(在libjingle peerconnection.dispose()中),而是因爲對我們來說,它是同一個類,所有的東西都被釋放 - 導致當其他班級被假定仍然在那裏時發生崩潰。

因此,爲每個觀察者重新設計了不同的私有類,並正確地將相應的觀察者傳遞給了創建對等連接(以及適合不同調用的sdp/data觀察者),然後全部工作 - dispose僅釋放PCObserver和所有很好。