Я пишу приложение, ориентированное на камеру. Моя главная проблема в том, что когда я нажимаю кнопку «Назад» на экране камеры, приложение закрывается как обычно, но затем оно падает на заднем плане. Я думаю, что обработал обработчик утилизации правильно:
@override
void dispose() async {
await _controller?.dispose();
super.dispose();
}
Контроллер - это контроллер камеры. Сначала у меня было это без async / await, но это действовало так же. Когда происходит сбой, я получаю следующее:
D/InputMethodManager(19934): prepareNavigationBarInfo() DecorView@51d4f30[MainActivity]
D/InputMethodManager(19934): getNavigationBarColor() -855310
D/InputTransport(19934): Input channel destroyed: 'ClientS', fd=104
D/SurfaceView(19934): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{57ae460 V.E...... ........ 0,0-1080,2136} of ViewRootImpl@2c02e5c[MainActivity]
D/SurfaceView(19934): surfaceDestroyed callback.size 1 #2 io.flutter.embedding.android.FlutterSurfaceView{57ae460 V.E...... ........ 0,0-1080,2136}
I/mali_egl(19934): eglDestroySurface() in
I/mali_winsys(19934): delete_surface() [1080x2136] return
I/mali_egl(19934): eglDestroySurface() out
W/libEGL (19934): EGLNativeWindowType 0x7b9986a010 disconnect failed
D/SurfaceView(19934): remove() io.flutter.embedding.android.FlutterSurfaceView{57ae460 V.E...... ........ 0,0-1080,2136} Surface(name=SurfaceView - io.memoo.app/io.memoo.app.MainActivity@57ae460@0)/@0x6d79b9
D/OpenGLRenderer(19934): makeCurrent EglSurface : 0x7b9975f480 -> 0x0
D/OpenGLRenderer(19934): destroyEglSurface : 0x7b9975f480
I/mali_egl(19934): eglDestroySurface() in
I/mali_winsys(19934): delete_surface() [1080x2280] return
I/mali_egl(19934): eglDestroySurface() out
W/libEGL (19934): EGLNativeWindowType 0x7b99f01510 disconnect failed
D/OpenGLRenderer(19934): ~ReliableSurface : 0x7b99f01500
D/ViewRootImpl@2c02e5c[MainActivity](19934): Relayout returned: old=(0,0,1080,2280) new=(0,0,1080,2280) req=(1080,2280)8 dur=5 res=0x5 s={false 0} ch=true
D/ViewRootImpl@2c02e5c[MainActivity](19934): stopped(true) old=false
D/SurfaceView(19934): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{57ae460 V.E...... ........ 0,0-1080,2136} of ViewRootImpl@2c02e5c[MainActivity]
D/FlutterView(19934): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@a4fd448
D/FlutterActivityAndFragmentDelegate(19934): Detaching FlutterEngine from the Activity that owns this Fragment.
D/FlutterEngine(19934): Destroying.
D/FlutterEnginePluginRegistry(19934): Destroying.
I/mali_egl(19934): eglDestroySurface() in
I/mali_egl(19934): eglDestroySurface() out
D/ViewRootImpl@2c02e5c[MainActivity](19934): dispatchDetachedFromWindow
D/InputTransport(19934): Input channel destroyed: '274023 ', fd=93
D/AndroidRuntime(19934): Shutting down VM
E/AndroidRuntime(19934): FATAL EXCEPTION: main
E/AndroidRuntime(19934): Process: io.memoo.app, PID: 19934
E/AndroidRuntime(19934): java.lang.RuntimeException: Cannot execute operation because FlutterJNI is not attached to native.
E/AndroidRuntime(19934): at io.flutter.embedding.engine.FlutterJNI.ensureAttachedToNative(FlutterJNI.java:227)
E/AndroidRuntime(19934): at io.flutter.embedding.engine.FlutterJNI.markTextureFrameAvailable(FlutterJNI.java:554)
E/AndroidRuntime(19934): at io.flutter.embedding.engine.renderer.FlutterRenderer.markTextureFrameAvailable(FlutterRenderer.java:274)
E/AndroidRuntime(19934): at io.flutter.embedding.engine.renderer.FlutterRenderer.access$300(FlutterRenderer.java:38)
E/AndroidRuntime(19934): at io.flutter.embedding.engine.renderer.FlutterRenderer$SurfaceTextureRegistryEntry$1.onFrameAvailable(FlutterRenderer.java:145)
E/AndroidRuntime(19934): at android.graphics.SurfaceTexture$1.handleMessage(SurfaceTexture.java:211)
E/AndroidRuntime(19934): at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(19934): at android.os.Looper.loop(Looper.java:237)
E/AndroidRuntime(19934): at android.app.ActivityThread.main(ActivityThread.java:8016)
E/AndroidRuntime(19934): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(19934): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/AndroidRuntime(19934): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
I/Process (19934): Sending signal. PID: 19934 SIG: 9
Lost connection to device.
Exited (sigterm)
Извините за блок текста, но я разместил весь журнал с того момента, как нажал кнопку "Назад". К сожалению, я ничего не смог сделать из этого.
Примечание
Кнопка "Домой" работает, как и ожидалось. Это помещает приложение в ящик и возобновляет его позже без ошибок. Ошибка также присутствует в сборке релиза. Я тестирую его на Samsung Galaxy S10e с Android 10.
Доктор флаттера
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.9, on Microsoft Windows [Version 10.0.18363.778], locale sl-SI)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 3.6)
[√] VS Code, 64-bit edition (version 1.43.2)
[√] Connected device (1 available)
• No issues found!