當前位置:首頁 » 安卓系統 » androidwebview關閉

androidwebview關閉

發布時間: 2023-03-26 14:36:55

❶ Android與Webview交互

補充
- WebViewClient
- WebViewClient主要幫助WebView處理各種通知、請求事件的,比如:
- shouldOverrideUrlLoading
- onLoadResource
- onPageStart
- onPageFinish
- onReceiveError
- onReceivedHttpAuthRequest
- WebChromeClient
-WebChromeClient主要輔助WebView處理javascript的對話框、網站圖標、網站title、載入進度等比如
- onCloseWindow(關閉WebView)
- onCreateWindow()
- onJsAlert (WebView上alert無效,需要定製WebChromeClient處理彈出)
- onJsPrompt
- onJsConfirm
- onProgressChanged
- onReceivedIcon
- onReceivedTitle

JsBridgeGithub傳送門

轉自Android與JsBridge使用原理

JsBridge重要的三點:

BridgeWebview

WebViewJavascriptBridge.js

❷ 關於Android WebView的那些事

[TOC]

Webkit是一個開源瀏覽器項目,其中,對Android開發者來說,或多或少的都有些接觸。 在應用層來看,最經常使用無非這么幾個類:WebView(Android中最為復雜,也是最為簡單的一個View,繼承自AbsoluteLayout),WebViewClient、WebChromeClient(作為回調控制類)、WebSettings(進行設置項的配置)等;Webkit內部包含了網路請求、頁面渲染、Js引擎等等。在Android4.4之前的版本中,系統使用的是Webkit內核,其後,切換到Google的Chromium內核。本文主要介紹的是在Android中,如何使用Webkit進行H5頁面的展現,以及常見問題的分析手段。

下面的內容抄自網路 & 亂七八糟的地方,簡單了解一下。

<b><i>前面都是吹牛逼的信息,如何使用Webkit來更好的搬磚? 且聽如下分解</i></b>

XML布局中丟一個 <WebView> 標簽,然後再 Activity 或者 Fragment 中 findViewById ,進而 loadUrl ,一般也沒人這么簡單的用,除非寫Demo。很簡單,它就是一個Layout,提供了一個調用載入頁面的介面,不寫範例了,能看到這篇文章的都看過Google的API說明。

主要涉及到WebView和WebSettings兩個類。

例如:

其實就是WebView的父類ViewGroup和View的方法,不多說了。不過需要注意的是,不是所有的View或ViewGroup的方法對WebView都生效。

列舉幾類常用的,幾乎所有App的 WebView 都會設置的屬性:

</br>

如何處理頁面跳轉以及特殊 Scheme

這個回調可以說是最容易出問題的一個回調,表示什麼? 字面意思,讓你重寫這個URL 的loading,比如點擊html打電話的一個 <a href=「tel:110」> 標簽,作為一個有節操、有責任心的瀏覽器,你需要處理 H5常用的幾個Scheme :

除此之外,還有各個應用自定義的scheme ,舉個例子,支付寶的支付Scheme : alipay: 。 這里的返回值,就代表你有沒有能力處理這個url,沒有的話Webkit就默認處理了。
需要注意的是,這個回調的觸發的絕大多數情況是點擊頁面的 <a href="xxxx"> a標簽,在Android中 loadUrl("http://www..com") ,是不會回調的,為什麼不會回調,各位自行理解吧。

超鏈接 <a> 標簽怎麼寫: 點我
特別說下窗口常見的兩種打開方式:

針對單頁模式的WebView框架(所有的html窗口均使用同一個WebView實例),不需要關注target的。
如果作為一個成熟的瀏覽器框架的話,是需要支持Html、JavaScript使用新窗口打開頁面,需要實現如下回調:

還有一個相關設置項: WebSettings.
此時,系統將不會再回調 shouldOverrideUrlLoading 。新窗口邏輯的具體實現機制,可以參考系統browser實現邏輯。

<b> 這里有個坑 </b>
Android 4.4版本 ,如果實現了onCreateWindow,也就是說頁面 <a> 標簽是這么寫的: <a href="http://www..com" target="_blank"> ,點擊此鏈接打開的新WebView窗口,此窗口中的url點擊,是不會觸發 shouldOverrideUrlLoading 。 這是剛替換成Chrominum內核出的一個bug。本人並沒在新版本上驗證是否已經修復。

另外,根據不同的Rom,底層實現是不一樣的,有的ROM會幫你處理各種調起scheme,也就是startActivity,有的ROM點一個url,就會拋一個intent出來,讓用戶選擇系統瀏覽器進行載入。

系統默認,提供了一個介面:

有什麼安全隱患呢?
戳這里

如果不知道Js怎麼寫, 請戳我

用PC的截圖意思一下,看出區別了吧。 這里確定、取消點擊以後就得調用 JsResult、JsPromptResult 的 confirm或者cancel。

因為安全問題,大一些的App Native與Js通信都不再用 WebView.addJavascriptInterface(Object) 了,都改用JsPrompt,因為JsPrompt中有message、有JsPromptResult可以返回給Js一些信息,所以橋選中了JsPrompt,另一個備選方案是JsConsole。

大體有這么幾種方式進行傳遞

具體方案實現時,多方面考慮使用何種方式。

還有一個比較牛逼的

系統源碼中均有方法注釋,怎麼用自己看吧。
那麼問題來了

查了下,只有這兩個相關的:
WebBackForwardList BackForwardList()
void clearHistory()
系統提供的關於歷史記錄的操作並不多,因為,不支持單條刪除啊,啊啊啊!
WebViewClient中,還有一個相關callback,當系統更新歷史記錄時回調:
void doUpdateVisitedHistory(WebView view, String url, boolean isReload)

<b>相關問題分析法:歷史棧回退錯誤的定位</b>

絕大多數回退錯誤是由於介面調用、回調中邏輯執行時序錯誤。
定位方法:利用 BackForwardList , doUpdateVisitedHistory 兩個介面在 loadUrl、onPageStart、onPageFinish 以及邏輯相關的地方調用,打log,查看歷史棧,這里注意下由於loarl是非同步的,需要考慮是否加延遲等等保證調用時機的准確。
本人曾經遇到一個問題:在WebChromeClient中的 JsPrompt回調中,直接進行WebView.goBack操作,結果發現WebView確實回退到上一個頁面,但是BackFowardList當前頁面的index未更新的問題,具體見另一個篇blog。

網上有很多關於WebView內存泄露的討論,據傳,老版本的WebView在展示大量圖片的時候,即使 WebView.destory() WebView=null ,也不會銷毀。
在新版本上,實際測試結果:compileSDKVersion 23 不會泄露。
一般,我們如何銷毀WebView比較保險?

這個問題好大。。。
暫時不介紹,另起blog進行說明。

解決方案:
實現回調 void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)

首先,提幾個需要注意的點:

個人歸納總結幾點:

step1 進入開發者模式,勾選「顯示布局邊界」;
step 2,回到你想查看的界面; step 3 假如內容區只有一層基本就是H5 WebView的,多個層級,就是Native。

看到左右圖的差異了吧。
還有另一種方法,RD屌絲們看這里,特別說明,這種方法不太適合瀏覽器。 (自有內核,可能會不準確)

好了,就介紹到這里,零零散散的幾年前寫的文章,第一篇blog,如有不對的地方,還懇請大家指正。

❸ androidsystemwebview已停止運行

已停止運行是Android系統中的一個常見錯瞎啟誤提示,通常是由於該應用程序出現了余櫻錯誤或崩潰導致的。解豎神叢決方法包括:
1、清除應用程序緩存和數據。
2、卸載並重新安裝該應用程序。
3、更新Android系統版本。
4、重啟設備。如果以上方法都無法解決問題,建議聯系設備廠商或技術支持人員進行進一步的排查和解決。

❹ android中解決關閉的webView時候音視頻還在播放問題

最好的解決告帶方案:

通過在不橡友此同生命周期處理

public void onResume() {

 梁迅   super.onResume();

    mWebView.resumeTimers();

 mWebView.onResume();

}

@Override

public void onPause() {

    super.onPause();

    mWebView.onPause();

}

@Override

@Override

protected void onDestroy() {

    mWebView.destroy();

    mWebView = null;

    super.onDestroy();

}

❺ androidsystemwebview可以停用嗎

可以停用。打開360安全衛士—軟體管家—卸載里找到要卸載的軟體然後點卸載就OK了。

❻ android 如何徹底退出一個帶有webview的activity

[mw_shl_code=java,true]appView.setVerticalScrollBarEnabled(false);
WebSettings webSetting = appView.getSettings();
webSetting.setJavaScriptEnabled(true);
webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

appView.addJavascriptInterface(new Object() {
public void closeActivity() {
mHandler.post(new Runnable() {
public void run() {
//appView.loadUrl("javascript:wave()");
PhonegapFrame.this.finish();
}
});
}
}, "javaMethod");[/mw_shl_code]

然後在html裡面:
[mw_shl_code=html,true] function closeWindow() {
window.javaMethod.closeActivity();
}[/mw_shl_code]

❼ android webview 怎麼開啟或關閉硬體加速

Google Android官方文檔中對WebView介紹如下:

HTML5Videosupport
accelerationturnedon.

所以安卓要開啟硬體加速只需要在清單文件或者WebViewActivity中配置即可:

四種級別:

Application級別:<applicationandroid:hardwareAccelerated="true"...>

Activity級別:<activityandroid:hardwareAccelerated="false"...>

Window級別:getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

View級別:
mView.setLayerType(View.LAYER_TYPE_HARDWARE,null);

❽ android webview 聲音關不掉

private void onClose(){

m_webview.loadUrl("about:blank");
finish();

}

熱點內容
qq聊天記錄在哪個文件夾win7 發布:2024-05-30 20:15:02 瀏覽:956
java的gc 發布:2024-05-30 20:14:04 瀏覽:403
文檔型資料庫 發布:2024-05-30 20:13:58 瀏覽:532
腳本滑動沒用 發布:2024-05-30 20:13:17 瀏覽:818
編譯原理全都要學嗎 發布:2024-05-30 19:51:32 瀏覽:805
計數演算法高中 發布:2024-05-30 19:29:08 瀏覽:296
百度首頁源碼 發布:2024-05-30 19:23:55 瀏覽:660
安卓腳本優化v6 發布:2024-05-30 19:13:15 瀏覽:49
dos文件加密命令 發布:2024-05-30 18:44:18 瀏覽:942
絲瓜視頻伺服器地址 發布:2024-05-30 18:40:02 瀏覽:955