java - Android media.AudioTrack.finalize 抛出 IllegalStateException : Binder has been finalized

标签 java android daemon mediarecorder

我正在使用自定义相机在 Android 上录制视频。 遇到问题的设备是装有 Android 6.0.1 的 Nexus 5。

当相机完成仅第二次的录制时,我在底层的 android 媒体 AudioTrack 类中得到以下异常。这是由 Android 和 FinalizerDaemon 隐式调用的东西,而不是我直接执行的任何代码的结果。因此 FinalizerDaemon 调用 AudioTrack 上的 finalize,并获得 IllegalStateException。

12-02 09:20:23.155 23705-23714/social.ivideo.greetings E/System: Uncaught exception thrown by finalizer
12-02 09:20:23.160 23705-23714/social.ivideo.greetings E/System: java.lang.IllegalStateException: Binder has been finalized!
                                                                     at android.os.BinderProxy.transactNative(Native Method)
                                                                     at android.os.BinderProxy.transact(Binder.java:615)
                                                                     at com.android.internal.app.IAppOpsService$Stub$Proxy.stopWatchingMode(IAppOpsService.java:435)
                                                                     at android.media.PlayerBase.baseRelease(PlayerBase.java:136)
                                                                     at android.media.AudioTrack.finalize(AudioTrack.java:979)
                                                                     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:222)
                                                                     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:209)
                                                                     at java.lang.Thread.run(Thread.java:761)

也许我需要在相机完成录制后进行某种清理?这是录制停止时我正在使用的当前代码:

 @Override
public void stopRecording(boolean wasCancelled, float duration) {
    if (mMediaRecorder != null) {
        mMediaRecorder.stop();
        mMediaRecorder.reset();

        if (flashState) {
            toggleFlash();
        }

        if (!wasCancelled) {
            callbacks.onFinishedRecording(null, mediaPath, duration, wasCancelled);
        }
    }
}

mMediaRecorder 是 MediaRecorder 类的实例。

有什么建议吗?

最佳答案

所以我认为这可能是一个 Android 错误。看起来很像这个问题,它在“ future 版本”中被标记为已修复:https://issuetracker.google.com/issues/37138597

Android 7.1.2 中报告的相同问题

已在 Android 8.0 中修复 https://android.googlesource.com/platform/frameworks/base/+log/aee6ee94675d56e71a42d52b16b8d8e5fa6ea3ff/media/java/android/media/PlayerBase.java

关于java - Android media.AudioTrack.finalize 抛出 IllegalStateException : Binder has been finalized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40934773/

相关文章:

java - 安卓通知

android - 如何更改ListView字体颜色?

php - 如何在 PHP 客户端和 C 守护程序服务器之间进行 IPC?

java - java中按值传递与按引用传递

java - 服务重启后出现 DeadObjectException

java - Camel useOriginalMessage 不工作

java 8,使用相同的 javassist 时,Lambda 表达式的工作方式不同

android - 在使用 valueAnimator 重复动画之前添加延迟

haskell - dupTo 与 STDOUT 相关的奇怪现象

java - Linux 服务中未获取环境变量