Android 已在附加的堆栈跟踪中获取资源,但从未释放-kotlin
我正在使用camera2并获得以下异常:Android 已在附加的堆栈跟踪中获取资源,但从未释放-kotlin,android,kotlin,surfaceview,android-camera2,android-camerax,Android,Kotlin,Surfaceview,Android Camera2,Android Camerax,我正在使用camera2并获得以下异常: 04-13 20:39:54.801 13097-13110/com.x.y.z E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. java.lang.Throwable: Explicit termin
04-13 20:39:54.801 13097-13110/com.x.y.z E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'release' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.view.Surface.setNativeObjectLocked(Surface.java:460)
at android.view.Surface.<init>(Surface.java:152)
at android.media.ImageReader.nativeGetSurface(Native Method)
at android.media.ImageReader.<init>(ImageReader.java:130)
at android.media.ImageReader.newInstance(ImageReader.java:100)
at androidx.camera.core.MetadataImageReader.createImageReaderProxy(MetadataImageReader.java:124)
at androidx.camera.core.MetadataImageReader.<init>(MetadataImageReader.java:113)
at androidx.camera.core.ImageCapture.createPipeline(ImageCapture.java:335)
at androidx.camera.core.ImageCapture.onSuggestedResolutionUpdated(ImageCapture.java:974)
at androidx.camera.core.UseCase.updateSuggestedResolution(UseCase.java:372)
at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:321)
at androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle(ProcessCameraProvider.java:229)
at com.x.y.z.fragments.CameraFragment$bindCameraUseCases$1.run(CameraFragment.kt:286)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5651)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
安卓工作室:3.6.2
科特林:1.3.61
提前感谢您的帮助
编辑1:
我意识到只有在使用StrictMode时才会发生这种情况
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build()
)
如果我在没有Penaltydath()的情况下运行我的代码,那么它的工作原理与示例一样流畅。我发现的解决方法是避免对泄漏的可关闭对象调用死刑。这个错误似乎来自安卓API,我已经把它指向安卓开发者,他们选择不采取行动
implementation "androidx.camera:camera-core:1.0.0-beta02"
implementation "androidx.camera:camera-camera2:1.0.0-beta02"
implementation "androidx.camera:camera-lifecycle:1.0.0-beta02"
implementation "androidx.camera:camera-view:1.0.0-alpha09"
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build()
)