flutter 由于Android Web视图的SIGTRAP崩溃导致的高崩溃率

hsgswve4  于 2023-10-22  发布在  Flutter
关注(0)|答案(3)|浏览(268)

我们正在经历很多崩溃(由于它们,崩溃率为2%),看起来像这样:

据我所知,它们是不可能被捕捉到的,因为它们发生在内部深处。目前的解决方案是警告用户更新他们的网页视图和Chrome,但似乎效果不大。我们也尝试使用onRenderProcessGone方法,但它没有任何效果。
有没有办法解决这个问题,或者了解问题在哪里?我甚至想过使用GeckoView,但我想知道它是否会有自己的问题。
我们的应用程序是一个Flutter应用程序,它使用Web视图来实现其大部分功能。我们将InAppWebView与以下选项一起使用:

return InAppWebViewGroupOptions(
  crossPlatform: InAppWebViewOptions(
      useShouldOverrideUrlLoading: true,
      mediaPlaybackRequiresUserGesture: false,
      javaScriptEnabled: true,
      javaScriptCanOpenWindowsAutomatically: true),
  android: AndroidInAppWebViewOptions(
    useHybridComposition: true,
    supportMultipleWindows: true,
  ),
  ios: IOSInAppWebViewOptions(
    allowsInlineMediaPlayback: true,
    applePayAPIEnabled: _applePayEnabled,
  ),
);
djp7away

djp7away1#

我可能认为这与webview本身中未处理的异常有关。必须有一些加载在webview中,这是创建一个边缘情况崩溃。
我的建议是,如果可以的话,尝试在Android原生应用程序中运行相同的程序。在那里,您将能够实际调试webview功能。

r3i60tvu

r3i60tvu2#

在这里,我们也可以通过在更换屏幕等的时候处理控制器来管理它。

aemubtdh

aemubtdh3#

我也面临着许多问题与webview在Flutter。但现在时过境迁flutter_inappwebview发布了他们新的预发布版本。它只是真棒。
我建议你使用pub.dev版本
这是我的代码。

import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

class WebViewXPage extends StatefulWidget {
  const WebViewXPage({
    Key? key,
  }) : super(key: key);

  @override
  State<WebViewXPage> createState() => _WebViewXPageState();
}

class _WebViewXPageState extends State<WebViewXPage> {
  @override
  void initState() {
    super.initState();
  }

  InAppWebViewController? webViewController;

  bool isLoading = true;
  int progress = 0;
  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        // Check if webview can go back
        if (await webViewController!.canGoBack()) {
          // Go back
          webViewController!.goBack();
          // Return false so this webview won't be popped
          return false;
        } else {
          // Let system handle back button
          return true;
        }
      },
      child: Scaffold(
        body: SafeArea(
          child: Stack(
            children: <Widget>[
              InAppWebView(
                onPermissionRequest: (controller, onPermissionRequest) async {
                 return PermissionResponse(
                    resources: onPermissionRequest.resources,
                    action: PermissionResponseAction.GRANT,
                  );
                },
                initialUrlRequest: URLRequest(
                  url: WebUri("https://snopixie.com/login/"),
                ),
                initialSettings: InAppWebViewSettings(
                  mediaPlaybackRequiresUserGesture: false,
                  allowsInlineMediaPlayback: true,
                  allowBackgroundAudioPlaying: true,
                  useHybridComposition: false,
                  allowFileAccess: true,
                ),
                onWebViewCreated: (controller) {
                  webViewController = controller;
                },
                onLoadStart: (controller, url) {
                  setState(() {
                    isLoading = true;
                    progress = 0;
                  });
                },
                onProgressChanged: (controller, p) {
                  setState(() {
                    isLoading = p < 100;
                    progress = p;
                  });
                },
                onLoadStop: (controller, url) {
                  setState(() {
                    isLoading = false;
                    progress = 0;
                  });
                },
                onConsoleMessage: (controller, consoleMessage) {},
              ),
              if (isLoading)
                Positioned(
                  top: 0,
                  left: 0,
                  right: 0,
                  child: SizedBox(
                    height: 4,
                    child: LinearProgressIndicator(
                      valueColor:
                          const AlwaysStoppedAnimation<Color>(Colors.blue),
                      value: progress / 100,
                    ),
                  ),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

相关问题