Android media.AudioTrack.finalize抛出IllegalStateException:Binder已经完成

时间:2016-12-02 14:42:25

标签: 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类的一个实例。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

所以我认为这可能是Android错误。可疑地看起来像这个问题,在“未来版本”中标记为已修复: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

中修复