android - WebRtcAudioRecord.context 由泄漏金丝雀报告泄漏。怎么解决?

标签 android kotlin memory-leaks webrtc leakcanary

我的 webrtc Android native 应用程序与 WebRtcAudioRecord.context 存在问题.泄漏金丝雀不断报告WebRtcAudioRecord.class正在泄漏内存。
我确实以这种方式处理我的 webrtc 组件:

 peerConnection?.dispose()
 videoCapture?.dispose()
 videoSource?.dispose()
 factory.dispose()
 PeerConnectionFactory.stopInternalTracingCapture()
 PeerConnectionFactory.shutdownInternalTracer()
但是 Leak canary 仍然不断报告 WebRtcAudioRecord.context正在泄漏。
知道如何解决这个问题吗?
我的应用程序不流式传输音频只是流式传输视频。
这是金丝雀内存泄漏报告:

┬─── │ GC Root: Global variable in native code │ ├─ org.webrtc.audio.WebRtcAudioRecord instance │ Leaking: UNKNOWN │
Retaining 99 B in 2 objects │ context instance of .ui.activities. │ MainActivity with mDestroyed = true │ ↓ WebRtcAudioRecord.context │

╰→ .ui.activities.MainActivity instance ​ Leaking: YES (ObjectWatcher was watching this because .ui.activities.MainActivity received Activity#onDestroy() ​ callback and Activity#mDestroyed is true) ​ Retaining 153.0 kB in 2750 objects ​ key = 33e94f80-0004-4aeb-b351-dab64a8280da ​ watchDurationMillis = 5134 ​ retainedDurationMillis = 134 ​ mApplication instance of .App ​ mBase instance of androidx.appcompat.view.ContextThemeWrapper

METADATA

Build.VERSION.SDK_INT: 29 Build.MANUFACTURER: HUAWEI LeakCanary version: 2.6 App process name: some.app Count of retained yet cleared: 10 KeyedWeakReference instances Stats: LruCache[maxSize=3000,hits=4250,misses=80514,hitRate=5%] RandomAccess[bytes=4071605,reads=80514,travel=36763422162,range=23400016,size=29 171709] Heap dump reason: 8 retained objects, app is visible Analysis duration: 4019 ms


enter image description here

最佳答案

我找到了原因!
对我来说,它是

 val options = PeerConnectionFactory.InitializationOptions.builder(context)
            .setEnableInternalTracer(true)
            .setFieldTrials("WebRTC-H264HighProfile/Enabled/")
            .createInitializationOptions()
我在这里为构建器传递了 Activity 上下文而不是应用程序上下文。

关于android - WebRtcAudioRecord.context 由泄漏金丝雀报告泄漏。怎么解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66486257/

相关文章:

android - 浏览 Android SQLite 数据库中的数据

android - 在模拟器中写入/系统/框架

java - 如何在不使用数字格式的情况下每 3 位添加逗号?

java-8 - 如何从kotlin传递suplier?

c - 只是一个循环,还有 33 个泄漏

android - Activity 恢复时再次发送 Intent

android - 如何使用 okhttp 身份验证器一次多次请求刷新 token

android - 当我尝试将更改监听器添加到搜索栏时,应用程序关闭(Android Studio,Kotlin)

ios - 使用仪器了解 Objective-C 中的保留计数(泄漏)

iphone - NSFetchedResultsController objectAtIndex 的内存泄漏