相机后退按钮抖动,导致应用崩溃

时间:2020-04-20 08:24:59

标签: android flutter dart flutter-dependencies

我正在写一个专注于相机的应用程序。我的主要问题是,当我按相机屏幕上的后退按钮时,该应用程序正常退出,但随后在后台崩溃。我认为我已经正确处理了处置处理程序:

@override
void dispose() async {
  await _controller?.dispose();
  super.dispose();
}

该控制器是相机控制器。起初,我没有异步/等待它,但它的作用相同。 当它崩溃时,我在输出中得到这个:

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)

很抱歉,您输入的文本不完整,但是从按下返回按钮的那一刻起,我就发布了整个日志。可悲的是我什么也做不了。

注意

主页按钮可以正常工作。它将应用程序放到抽屉中,稍后再继续运行,不会出现任何错误。 该错误也存在于发行版本中。我正在使用Android 10的三星Galaxy s10e进行测试。

扑打医生

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!

2 个答案:

答案 0 :(得分:0)

我不知道您是否已经解决了这个问题,或者是否有人遇到了这个问题,但是我设法让我使用了Android文件夹中的类中实现的此功能。

import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel

class MainActivity: FlutterActivity() {
  private val CHANNEL = "samples.flutter.dev/battery"

  override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
      call, result ->
      // Note: this method is invoked on the main thread.
      // TODO
    }
  }
}

此功能是从以下链接的flutter文档中提取的:

https://flutter.dev/docs/development/platform-integration/platform-channels?tab=android-channel-kotlin-tab#step-3-add-an-android-platform-specific-implementation

在第3步中,它演示了如何实现任何Android本机库。

答案 1 :(得分:0)

我安装了最新的插件版本,然后严格遵循其示例。然后它可以正常工作。

之前,我有用于初始化和处置相机的自定义逻辑,即使一切都说得通,但这还是行不通的。

相关问题