Java Android media.AudioTrack.finalize抛出非法状态异常:活页夹已完成
我正在使用一个定制相机在android上录制视频。 出现问题的设备是一款搭载安卓6.0.1的Nexus5 当相机第二次录制完时,我在under the hood android media AudioTrack课程中遇到了以下例外情况。这是android、FinalizerDamon隐式调用的东西,而不是我直接执行的任何代码的结果。因此FinalizerDamon调用AudioTrack上的finalize,并获得一个非法状态异常Java Android media.AudioTrack.finalize抛出非法状态异常:活页夹已完成,java,android,daemon,mediarecorder,Java,Android,Daemon,Mediarecorder,我正在使用一个定制相机在android上录制视频。 出现问题的设备是一款搭载安卓6.0.1的Nexus5 当相机第二次录制完时,我在under the hood android media AudioTrack课程中遇到了以下例外情况。这是android、FinalizerDamon隐式调用的东西,而不是我直接执行的任何代码的结果。因此FinalizerDamon调用AudioTrack上的finalize,并获得一个非法状态异常 12-02 09:20:23.155 23705-23714/s
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 7.1.2中也报告了同样的问题 在安卓8.0中修复