WebView

1.webView常見的一些坑

  • 1.Android API level 16以及之前的版本存在遠(yuǎn)程代碼執(zhí)行安全漏洞审编,該漏洞源于程序沒有正確限制使用webView.addJavascriptInterface方法,遠(yuǎn)程攻擊者可通過使用Java Refection API利用該漏洞執(zhí)行任意Java對象的方法糯而。
  • 2.webView在布局文件中的使用:webView寫在其他容器中時(shí),必須先將webview從該容器中remove掉略荡,在調(diào)用webview的removeAllViews 和webview的destory方法胁赢,才能真正的銷毀整個(gè)webview,否則會出現(xiàn)內(nèi)存泄漏問題雳攘。
  • 3.jsbridge :就是android端與web端之間的橋梁。實(shí)現(xiàn)兩個(gè)端互調(diào)枫笛。
  • 4.webViewClient.onPageFinished:他會判斷這個(gè)網(wǎng)頁內(nèi)容是否真的已經(jīng)加載完畢吨灭。而如果當(dāng)前網(wǎng)頁產(chǎn)生跳轉(zhuǎn)的話這個(gè)方法會被加載無數(shù)次。所以我們一般使用webChromeClient.onProgressChanged崇堰。
  • 5.后臺耗電 當(dāng)webview加載網(wǎng)頁時(shí) 沃于,webView會自己開啟線程涩咖,如果webview沒有很好的被銷毀的話海诲,這個(gè)線程會一直在運(yùn)行,導(dǎo)致耗電量居高不下檩互。
  • 6.webView硬件加速導(dǎo)致頁面渲染問題 暫時(shí)沒有更好的解決方法特幔。只能關(guān)閉硬件加速。
  • 7.webview嵌套h5支付闸昨。比如支付寶支付 微信支付的時(shí)候 需要使用webview.loadUrl(url,map)方法蚯斯。map里put一個(gè)Referer,這個(gè)Referer由H5的同事提供饵较。另外自定義WebViewClient拍嵌,重寫shouldOverrideUrlLoading()方法 具體代碼如下(請根據(jù)自己的業(yè)務(wù)需求修改):
private class MyWebViewClient extends WebViewClient {
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.e("hjj", url);
        if (url.endsWith(".apk")) {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW);
            Uri uri = Uri.parse(url.trim());
            try {
                browserIntent.setData(uri);
                startActivity(browserIntent);
            } catch (Exception e) {
                PackageManager packageManager = getPackageManager();
                browserIntent.setDataAndType(uri, "text/html");
                List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
                for (ResolveInfo resolveInfo : list) {
                    String activityName = resolveInfo.activityInfo.name;
                    if (activityName.contains("BrowserActivity")) {
                        browserIntent =
                                packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
                        ComponentName comp =
                                new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
                        browserIntent.setAction(Intent.ACTION_VIEW);
                        browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
                        browserIntent.setComponent(comp);
                        browserIntent.setData(uri);
                    }
                }
                startActivity(browserIntent);
            }
        } else {
            if (url.startsWith("http") || url.startsWith("https")) {
                view.loadUrl(url, headers);
            } else {
                try {
                    startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
                } catch (Exception e) {
                    if (url.startsWith("alipays://") && !PlatformUtil.isInstallApp(GameActivity.this, PlatformUtil.PACKAGE_ALIPAY)) {
                        new AlertDialog.Builder(GameActivity.this)
                                .setMessage("未檢測到支付寶客戶端,請安裝后重試循诉。")
                                .setPositiveButton(
                                        "立即安裝",
                                        new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                Uri alipayUrl = Uri.parse("https://d.alipay.com");
                                                startActivity(new Intent("android.intent.action.VIEW", alipayUrl));
                                            }
                                        }).setNegativeButton("取消", null)
                                .show();
                    }
                }
                return true;
            }
        }
        return false;
    }
}

2.避免webview內(nèi)存泄漏方法

  • 1.獨(dú)立進(jìn)程横辆,簡單暴力,不過可能涉及到進(jìn)程間通信茄猫。
    WebView獨(dú)立進(jìn)程的實(shí)現(xiàn)比較簡單狈蚤,只需要在AndroidManifest中找到對應(yīng)的WebViewActivity困肩,對其配置"android: process"屬性即可。
  • 2.動態(tài)添加webView脆侮,對傳入webView中使用的Context使用弱引用锌畸,動態(tài)添加WebView意思在布局創(chuàng)建個(gè)viewGroup用來放置WebView,Activity創(chuàng)建時(shí)add進(jìn)來靖避。在activity停止時(shí)remove掉潭枣。在調(diào)用webview的removeAllViews 和webview的destory方法。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幻捏,一起剝皮案震驚了整個(gè)濱河市卸耘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粘咖,老刑警劉巖蚣抗,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓮下,居然都是意外死亡翰铡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門讽坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锭魔,“玉大人,你說我怎么就攤上這事路呜∶耘酰” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵胀葱,是天一觀的道長漠秋。 經(jīng)常有香客問我,道長抵屿,這世上最難降的妖魔是什么庆锦? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮轧葛,結(jié)果婚禮上搂抒,老公的妹妹穿的比我還像新娘。我一直安慰自己尿扯,他們只是感情好求晶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衷笋,像睡著了一般芳杏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天蚜锨,我揣著相機(jī)與錄音档插,去河邊找鬼。 笑死亚再,一個(gè)胖子當(dāng)著我的面吹牛郭膛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氛悬,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼则剃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了如捅?” 一聲冷哼從身側(cè)響起棍现,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜遣,沒想到半個(gè)月后己肮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悲关,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年谎僻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寓辱。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艘绍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秫筏,到底是詐尸還是另有隱情诱鞠,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布这敬,位于F島的核電站航夺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹅颊。R本人自食惡果不足惜敷存,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堪伍。 院中可真熱鬧,春花似錦觅闽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽觉增。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吮廉,已是汗流浹背苞尝。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宦芦,地道東北人宙址。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像调卑,于是被迫代替她去往敵國和親抡砂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容