Android WebView的使用

一、 WebView的基本介紹

WebView是Android開發中的一個非常重要的控制項,它可以讓我們在應用程序中載入並顯示網頁、圖片等替代在瀏覽器中訪問。不僅如此,WebView也可以實現JavaScript與Java之間的相互調用、頁面內容的持久化、緩存和離線存儲等。

1、通過XML定義WebView

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

2、通過代碼定義WebView

    WebView webView = new WebView(this);
        setContentView(webView);
        webView.loadUrl("http://www.example.com");

二、 WebView的設置與用法

1、設置WebViewClient和WebChromeClient

使用setWebViewClient()設置WebViewClient可以讓WebView在當前應用程序中載入網頁,而不是跳轉到系統瀏覽器中。

使用setWebChromeClient()設置WebChromeClient可以接收WebView的一些通知信息,如網頁標題改變、載入進度等。

    webView.setWebViewClient(new WebViewClient() {
            // 當頁面載入完畢後回調
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }
        });

2、WebView的基本設置

WebView提供了很多基本設置,包括載入緩存、JavaScript支持、縮放控制等。

    // 啟用JavaScript支持
        webView.getSettings().setJavaScriptEnabled(true);

        // 設置允許訪問文件
        webView.getSettings().setAllowFileAccess(true);

        // 不縮放
        webView.getSettings().setBuiltInZoomControls(false);

        // 開啟DOM storage
        webView.getSettings().setDomStorageEnabled(true);

        // 緩存模式:不使用緩存
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

        // 支持縮放
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setUseWideViewPort(true);

3、WebView的前進與後退

我們可以通過調用goBack()和goForward()方法讓WebView前進或後退頁面。

    // 前進
        if (webView.canGoForward()) {
            webView.goForward();
        }

        // 後退
        if (webView.canGoBack()) {
            webView.goBack();
        }

4、JavaScript與Java的交互

如果需要在WebView中執行一些JavaScript腳本並獲取它們的返回結果,我們可以通過調用evaluateJavascript()方法實現。

而在WebView中調用Java方法,則需要通過JSBridge注入JavaScript代碼實現。

(1)evaluateJavascript()方法

evaluateJavascript()方法有兩個參數:要執行的JavaScript代碼和返回結果的回調函數。下面是一個簡單的例子,它使用evaluateJavascript()方法獲取網頁中的標題信息。

    // 載入完成監聽器
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                // 獲取標題
                webView.evaluateJavascript("javascript:document.title", new ValueCallback() {
                    @Override
                    public void onReceiveValue(String value) {
                        Log.d(TAG, "onReceiveValue: " + value);
                    }
                });
            }
        });

(2)JSBridge實現JavaScript與Java的互調

JSBridge是一種基於WebView的JavaScript與Java相互調用橋樑,它可以在WebView中inject一個JavaScript對象,在JavaScript中調用Java類的方法、獲取Java對象的屬性等。

下面是一個簡單的例子,它演示了如何在JavaScript中調用Android中的一個方法,方法接收一個字元串參數並返回一個字元串結果。

    // 添加JSBridge
        WebView.addJavascriptInterface(new Object() {
            @JavascriptInterface
            public String callAndroid(String arg) {
                // 調用方法並返回結果
                return "Hello, " + arg;
            }
        }, "jsBridge");

        // 在JavaScript中調用Android方法
        webView.loadUrl("javascript:alert(jsBridge.callAndroid('World!'));");

三、 WebView的優化

1、減少不必要的載入

WebView默認會載入所有資源,包括圖片、樣式、腳本等,這樣會導致載入速度變慢、消耗流量增加。因此,我們應該盡量減少不必要的載入。

可以通過以下兩種方式實現:

(1)使用WebViewClient中的shouldInterceptRequest()方法截取資源請求,返回null則表示不載入該資源;

(2)使用WebSettings中的setBlockNetworkImage()方法禁止載入圖片。

2、啟用緩存

可以通過WebSettings中的setAppCacheEnabled()、setCacheMode()等方法來啟用WebView緩存。例如,以下代碼啟用了應用緩存、開啟DOM storage和啟用LocalStorage:

    // 啟用應用緩存
        webView.getSettings().setAppCacheEnabled(true);

        // 設置緩存模式
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

        // 啟用DOM storage
        webView.getSettings().setDomStorageEnabled(true);

        // 啟用LocalStorage
        webView.getSettings().setDatabaseEnabled(true);
        webView.getSettings().setDatabasePath(getApplicationContext().getCacheDir().getAbsolutePath() + "/database/");

3、WebView的復用

WebView的創建和銷毀是很耗費資源的操作,因此我們應該盡量避免創建和銷毀WebView。可以通過在Activity中創建一個單例的WebView對象,然後在需要使用WebView的地方調用該對象即可。

以下是一個簡單的例子,它在Activity中創建了一個單例的WebView對象,並提供了一個start方法用於載入指定的URL。

    public class WebViewManager {
        private static volatile WebViewManager instance;
        private WebView webView;

        private WebViewManager(Context context) {
            webView = new WebView(context);
            webView.setWebViewClient(new WebViewClient() {
                // ...
            });
        }

        public static WebViewManager getInstance(Context context) {
            if (instance == null) {
                synchronized (WebViewManager.class) {
                    if (instance == null) {
                        instance = new WebViewManager(context);
                    }
                }
            }
            return instance;
        }

        public void start(String url) {
            webView.loadUrl(url);
            // ...
        }

        // ...
    }

4、避免內存泄漏

由於WebView的使用場景很多,無論在哪個地方使用WebView,都有可能引發內存泄漏問題。

下面是一些WebView內存泄漏的常見情況:

(1)在Activity銷毀時未銷毀WebView;

(2)沒有調用WebView.destroy()方法來釋放WebView的資源;

(3)綁定了Activity的上下文,導致WebView在Activity銷毀後仍保持了對該Activity的引用。

原創文章,作者:KHMSJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333900.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KHMSJ的頭像KHMSJ
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控制項。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Android Java Utils 可以如何提高你的開發效率

    Android Java Utils 是一款提供了一系列方便實用的工具類的 Java 庫,可以幫助開發者更加高效地進行 Android 開發,提高開發效率。本文將從以下幾個方面對 …

    編程 2025-04-27
  • Android JUnit測試完成程序自動退出決方法

    對於一些Android JUnit測試的開發人員來說,程序自動退出是一個經常面臨的困擾。下面從多個方面給出解決方法。 一、檢查測試代碼 首先,我們應該仔細檢查我們的測試代碼,確保它…

    編程 2025-04-25
  • Android Activity啟動流程

    一、Activity概述 Android應用程序是由許多Activity組成的。一個Activity代表一個屏幕上的窗口。用戶與應用程序交互時,Activity會接收用戶的輸入並處…

    編程 2025-04-25
  • Android單元測試詳解

    一、單元測試概述 單元測試是指對軟體中的最小可測試單元進行檢查和驗證。在Android開發中,單元測試是非常重要的一環,可以保證代碼的質量、穩定性以及可維護性。 在Android開…

    編程 2025-04-25
  • Android WebView載入本地HTML

    一、介紹 Android WebView是一個內置的瀏覽器,它允許開發人員在應用中嵌入網頁。使用WebView可以輕鬆地在應用程序中顯示本地或遠程的HTML內容。本篇文章將重點講述…

    編程 2025-04-24
  • Android Studio APK全方位詳解

    隨著移動互聯網的快速發展,移動應用開發者的數量也在逐年增加,而Android作為全球最大的移動操作系統之一,因其中文化廣泛、簡單易學、開放自由等特點而備受開發者青睞。而Androi…

    編程 2025-04-24

發表回復

登錄後才能評論