【问题标题】:White/blank screen when opening PDF multiple times xamarin (Seems to be a memory error)xamarin 多次打开 PDF 时出现白屏/空白屏幕(似乎是内存错误)
【发布时间】:2020-03-22 01:21:39
【问题描述】:

我目前正在制作一个 xamarin 应用程序,其中包含一个列表视图,单击该列表视图时会在 web 视图中使用 google.docs 打开生成的 pdf(不是最干净的方式,但可以满足我的需要)。 PDF 使用包含 web 视图的 rg.plugin 弹出窗口打开。当用户查看完 pdf 后,他们可以退出并返回列表视图页面。

一切正常,但是一旦我打开/关闭了 4/5 pdf,webview 开始只显示一个空白屏幕。我相信这一定是 webview/application 持有那些 pdf 而不是释放内存的错误。

我真正要问的是,可以做些什么来缓解这个问题,无论是在弹出窗口关闭后清理还是其他什么?

非常感谢

【问题讨论】:

  • 你能告诉我们你的代码吗?没有那个很难帮助! :)

标签: c# xamarin xamarin.forms webview


【解决方案1】:

我设法根据你之前所说的解决了我的问题,我只是想我会发布我的解决方案,以防它对寻找这个的其他人有用。

在我的自定义 webview 渲染器 android 中,我创建了一个自定义 webviewclient,它使用 onPageCommitVisible 检查页面是否已正确加载。如果加载不成功,则再次加载页面以解决问题。

class CustomWebViewClient : WebViewClient
{
        bool pageCommitted = false;

        public override void OnPageFinished(Android.Webkit.WebView view, string url)
        {

            if (!pageCommitted)
            {
                view.LoadUrl(url);
            }

            base.OnPageFinished(view, url);
        }

        public override void OnPageCommitVisible(Android.Webkit.WebView view, string url)
        {
            pageCommitted = true;
        }
}

将它附加到我的 OnElementChanged 事件中

protected override void OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
    {
        base.OnElementChanged(e);

        //Control.LoadUrl("about:blank");

        if (Control == null)
        {
            var webView = new Android.Webkit.WebView(_context);
            webView.Settings.SetSupportZoom(true);
            webView.Settings.BuiltInZoomControls = true;
            webView.Settings.DisplayZoomControls = false;
            webView.Settings.JavaScriptEnabled = true;
            webView.Settings.SetEnableSmoothTransition(true);
            webView.SetWebViewClient(new CustomWebViewClient());
            SetNativeControl(webView);
            Control.LoadUrl(Element.Uri);
        }
    }

【讨论】:

  • 此解决方案适合您。太好了,我已经更新了 100% 有效的最新解决方案。如果你愿意,你也可以试试!
【解决方案2】:

这是我遇到的类似问题。这是 Android Webview 的问题,而不是 Xamarin 的问题。你可以看到我的问题 Android Webview cannot render the pdf sometimes and shows blank/white page instead

您可以通过两种方式解决问题。 1.一种是在服务器端使用Js.Pdf Plugin。 2. 不推荐第二个选项。您可以递归调用该函数来加载 webview。下面是代码:

private void showPdf(final String imageString) {
pdfView.invalidate();
pdfView.getSettings().setJavaScriptEnabled(true);
pdfView.getSettings().setSupportZoom(true);
pdfView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + imageString);
pdfView.setWebViewClient(new WebViewClient() {
    boolean checkhasOnPageStarted = false;

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

    }

    @Override
    public void onPageFinished(WebView view, String url) {
       if(view.Title == ""){
           view.Reload();
    }
});}

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2015-06-21
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多