【问题标题】:Mozilla PDF extremely slow on Samsung Devices三星设备上的 Mozilla PDF 速度极慢
【发布时间】:2015-05-16 17:08:41
【问题描述】:

我有一个应用程序,我在其中使用 Mozilla PDF 来查看 PDF。

Mozilla PDF 使用 Web 视图加载 PDF。

PDF 文件很大,实际上都是图片。

该应用程序运行良好,但 PDF 在所有三星设备上的加载速度都非常慢。该应用程序在其他设备上运行良好,但在三星上运行速度太慢,根本没用。

我对 web 视图有以下设置:

    settings.setJavaScriptEnabled(true);
    settings.setRenderPriority(RenderPriority.HIGH);
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

我也设置了 WebChromeClient。

有谁知道我为什么会遇到这个问题?并且仅在三星设备上? 任何解决方法?任何帮助将不胜感激。

【问题讨论】:

  • “Mozilla PDF”是指PDF.js吗?
  • 你可以看看systrace是否给你任何线索。
  • 您最终是否为该应用程序使用了 pdf.js?如果是这样,对移动设备上的 pdf.js 赞不绝口?
  • @CoolCodeBro 不赞成移动设备上的 PDF.js。我找不到 MIT 许可证有什么好处,所以我不得不使用 CBZ 文件并使用 CBZ 查看器。
  • 在 Android 上为 PDF.js 点赞。

标签: android pdf webview mozilla


【解决方案1】:

这是一个 WebView 设置,用于使用 PDF.js 显示 PDF。它适用于所有设备(至少运行API 19),包括即将死亡的旧三星。

    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setSupportMultipleWindows(true);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
    {
        webView.getSettings().setAllowFileAccessFromFileURLs(true);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
    {
        webView.getSettings().setMediaPlaybackRequiresUserGesture(true);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    }
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAllowContentAccess(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new WebChromeClient());

    // should enable pinch to zoom....
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(false);
    String webViewUrl;
    try
    {
    /*
    Try encoding the PDF file URL. I think i’ve read that this helps with
    load/rendering speed?
    */
        webViewUrl = "file:///android_asset/pdfjs/web/viewer.html?file=" + URLEncoder
                .encode(pdfUri.toString(), "UTF-8");
    }
    catch (UnsupportedEncodingException e)
    {
        // It works without encoding it (at least in my case) so just display it with the string as is.
        Log.e("Error encoding PDF file URL, will display without encoding.", e);
        webViewUrl = "file:///android_asset/pdfjs/web/viewer.html?file=" + pdfUri.toString();
    }
    webView.loadUrl(webViewUrl);

不确定这是否有帮助,但我想我会发布一个完整的 WebView 设置来支持 PDF.js,我从来没有遇到过速度问题。祝你好运。

注意:在应用程序的清单中打开硬件加速也是一个好主意。这仅适用于API 14 及更高版本。到目前为止,这应该不是问题(如果是,我的心向你致敬)。

<application
        android:name="com.pdfjs.webview.app.McAwesome"
        //...
        android:hardwareAccelerated="true">       
</application>

【讨论】:

  • 我最终使用了其他东西,但感谢您的回答!
  • @nullpointer - 完全没问题。 pdf.js 有点棘手,需要一些技巧。我花了很多时间让它工作。但它是一个可靠的、维护良好的开源库。很高兴你找到了解决方法:)
猜你喜欢
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多