精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

WebView想說愛你不容易啊

移動開發 移動應用 Android
現在的手機高度定制,多多少少都會對系統原生的代碼進行了修改和添加的,不同的手機的WebView呈現出來的效果也是不同的,可以說是五彩繽紛了,所以我懂Android開發者的痛苦。接下來我就具體去講解我在項目中使用WebView的經驗,不喜勿噴哈。

[[189802]]

為什么要使用WebView

隨著app業務的不斷深入發展,只靠著原生代碼來堆砌功能是不現實,畢竟開發的時長會增加,而且同時需要開發iOS和Android兩套,并且,如果在UI上改變了一丁點,都需要提包(雖然Android現在可以進行熱更新,但是熱更新不是100%能生效的,其中的原理只要了解過的人都會知道的),最終我們會選擇使用原生嵌套H5的方式進行開發,這樣,既可以隨時更改UI,也可以***制的進行功能擴展,然后,我們就要使用到Android的WebView了,這個讓我們痛并快樂著的控件。

現在的手機高度定制,多多少少都會對系統原生的代碼進行了修改和添加的,不同的手機的WebView呈現出來的效果也是不同的,可以說是五彩繽紛了,所以我懂Android開發者的痛苦。接下來我就具體去講解我在項目中使用WebView的經驗,不喜勿噴哈。

使用

一開始相信大家都是直接在布局文件中添加WebView控件,當然我一開始也是這樣做的,就是為了簡單,而且也不知道這樣會出現什么問題。

  1. <WebView     
  2.  
  3.     android:id="@+id/web_view"     
  4.  
  5.     android:layout_width="match_parent"     
  6.  
  7.     android:layout_height="match_parent"/>  

直接就這樣添加了一個WebView,發現也沒什么問題啊,一樣可以顯示,什么都是正常的啊。在重復打開有WebView的頁面時,你會發現,應用的內存會不斷升高,銷毀了之后也不會降下來,點擊GC也降不下來,這樣就出現了內存泄漏了,這時你就會發現,這樣使用WebView是不正確的,那么***方式是如何使用呢?

那就是在代碼中動態添加。

首先在布局文件中聲明一個parent布局

  1. <LinearLayout 
  2.  
  3. android:id="@+id/web_view" 
  4.  
  5. android:layout_width="match_parent" 
  6.  
  7. android:layout_height="wrap_content" 
  8.  
  9. android:orientation="horizontal" 
  10.  
  11. android:scrollbars="none" />  

然后在代碼中,把WebView當做其子View添加進去

  1. WebView webView = new WebView(context); 
  2.  
  3. webViewLayout.addView(webView);  

網上很多人說這個context應該用application的,我覺得是不對的,如果你的WebView需要彈出一個dialog呢?還有其他的不可預估的問題的,***還是用當前的activity的Context是最合適的。

上面說的是如何把WebView添加進來進行使用,然后到底它有哪些屬性是我們在開發中需要使用到的呢?

  1. webView.loadUrl("www.baidu.com");//WebView加載的網頁使用loadUrl 
  2.  
  3. WebSettings webSettings = webView.getSettings();//獲得WebView的設置 
  4.  
  5. webSettings.setUseWideViewPort(true);// 設置此屬性,可任意比例縮放 
  6.  
  7. webSettings.setLoadWithOverviewMode(true);//適配 
  8.  
  9. webSettings.setJavaScriptEnabled(true);  //支持js 
  10.  
  11. webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);  //設置 緩存模式 
  12.  
  13. webSettings.setDomStorageEnabled(true);// 開啟 DOM storage API 功能 
  14.  
  15. webSettings.setDatabaseEnabled(true);//開啟 database storage API 功能 
  16.  
  17. webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);//HTTPS,注意這個是在LOLLIPOP以上才調用的 
  18.  
  19. webSettings.setAppCacheEnabled(true);//開啟 Application Caches 功能 
  20.  
  21. webSettings.setBlockNetworkImage(true);//關閉加載網絡圖片,在一開始加載的時候可以設置為true,當加載完網頁的時候再設置為false  

上面是使用WebView中最基礎的設置,相信在開發過程中都會進行如上的設置的。

  1. webView.setWebChromeClient(new WebChromeClient() {     
  2.  
  3.      @Override    
  4.  
  5.      public void onProgressChanged(WebView viewint newProgress) { 
  6.  
  7.          //加載的進度 
  8.  
  9.      } 
  10.  
  11.      @Override 
  12.  
  13.      public void onReceivedTitle(WebView view, String title) {    
  14.  
  15.          //獲取WebView的標題 
  16.  
  17.      } 
  18.  
  19.     @Override 
  20.  
  21.     public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {     
  22.  
  23.         return super.onJsAlert(view, url, message, result); 
  24.  
  25.         //Js 彈框 
  26.  
  27.     } 
  28.  
  29.     @Override 
  30.  
  31.     public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {    
  32.  
  33.         AlertDialog.Builder b = new AlertDialog.Builder(IllegalQueryActivity.this);     
  34.  
  35.         b.setTitle("刪除");     
  36.  
  37.         b.setMessage(message);     
  38.  
  39.         b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {         
  40.  
  41.             @Override         
  42.  
  43.             public void onClick(DialogInterface dialog, int which) {             
  44.  
  45.                 result.confirm();         
  46.  
  47.             }     
  48.  
  49.         });     
  50.  
  51.         b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {         
  52.  
  53.             @Override         
  54.  
  55.             public void onClick(DialogInterface dialog, int which) {             
  56.  
  57.                 result.cancel();         
  58.  
  59.             }     
  60.  
  61.         });     
  62.  
  63.         b.create().show();     
  64.  
  65.         return true
  66.  
  67.     } 
  68.  
  69. }); 
  70.  
  71. webView.setWebViewClient(new WebViewClient() {     
  72.  
  73.     @Override     
  74.  
  75.     public boolean shouldOverrideUrlLoading(WebView view, String url) {         
  76.  
  77.        //需要設置在當前WebView中顯示網頁,才不會跳到默認的瀏覽器進行顯示 
  78.  
  79.        return true;    
  80.  
  81.     }     
  82.  
  83.     @Override     
  84.  
  85.     public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 
  86.  
  87.         super.onReceivedError(view, request, error); 
  88.  
  89.         //加載出錯了 
  90.  
  91.     }    
  92.  
  93.     @Override     
  94.  
  95.     public void onPageFinished(WebView view, String url) {         
  96.  
  97.         super.onPageFinished(view, url); 
  98.  
  99.         //加載完成 
  100.  
  101.     } 
  102.  
  103. }); 
  104.  
  105. webView.setDownloadListener(new DownLoadListener());//下載監聽 
  106.  
  107. private class DownLoadListener implements DownloadListener {    
  108.  
  109.     @Override    
  110.  
  111.     public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {       
  112.  
  113.     } 
  114.  
  115.  

然后就是WebView跟JS的交互了

  1. webView.addJavascriptInterface(new WebAppInterface(this), "WebJs"); 
  2.  
  3. public class WebAppInterface {  
  4.  
  5.     Context mContext;     
  6.  
  7.     public WebAppInterface(Context c) {         
  8.  
  9.         mContext = c;     
  10.  
  11.     }     
  12.  
  13.     @JavascriptInterface     
  14.  
  15.     public void method() { 
  16.  
  17.     } 
  18.  
  19.  
  20. webView.loadUrl("javascript:jsMethod()");//這是WebView最簡單的調用JS的方法  

當activity執行生命周期的時候,這里需要注意的是在onDestroy的時候,需要銷毀WebView,不然也會出現內存泄漏的。

  1. @Overrideprotected void onPause() {     
  2.  
  3.     super.onPause();     
  4.  
  5.     if (webView != null) {         
  6.  
  7.         webView.onPause();     
  8.  
  9.     } 
  10.  
  11.  
  12. @Override 
  13.  
  14. protected void onResume() {     
  15.  
  16.     super.onResume();     
  17.  
  18.     if (webView != null) {         
  19.  
  20.         webView.onResume();     
  21.  
  22.     } 
  23.  
  24.  
  25. @Override 
  26.  
  27. protected void onDestroy() {         
  28.  
  29.     if (webView != null) {         
  30.  
  31.         webView.clearCache(true); //清空緩存    
  32.  
  33.         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {             
  34.  
  35.             if (webViewLayout != null) {                 
  36.  
  37.                 webViewLayout.removeView(webView);             
  38.  
  39.             }             
  40.  
  41.         webView.removeAllViews();             
  42.  
  43.         webView.destroy();         
  44.  
  45.     }else {             
  46.  
  47.         webView.removeAllViews();             
  48.  
  49.         webView.destroy();             
  50.  
  51.         if (webViewLayout != null) {                 
  52.  
  53.             webViewLayout.removeView(webView);            
  54.  
  55.         }         
  56.  
  57.      }   
  58.  
  59.      webView = null;     
  60.  
  61.   }    
  62.  
  63.  

可以看到上面的onDestroy方法中對系統的版本進行了判斷,那是因為我在不同的版本中進行了測試,如果低于5.0版本的WebView中,如果先在parent中remove了WebView,那WebView將無法進行destroy了,這樣就會造成內存的泄漏,下來你們可以自己去嘗試一下這個說法是不是正確的。

現在還遇到的一個問題就是,當WebView嵌套在ScrollView中時,某些機型會出現閃屏的問題,單獨WebView的時候是不會出現的,把硬件加速關閉了之后,對用戶的體驗又不好,所以暫時還未想到比較好的解決方案,所以還是建議不要在ScrollView中嵌套WebView這樣的控件。 

責任編輯:龐桂玉 來源: 安卓巴士Android開發者門戶
相關推薦

2013-09-22 09:16:25

碼農程序員黑客

2018-01-24 07:28:20

2009-09-04 08:19:24

Windows 7優缺點

2009-02-12 17:25:21

Windows7試用下載

2011-12-16 14:52:55

移動互聯聯想

2012-08-20 10:13:39

云計算服務配置

2016-02-18 10:52:25

ApplePay綁定失敗蘋果

2013-05-17 10:18:16

2012-05-24 13:24:00

Linux操作系統

2012-06-13 14:58:09

BYOD移動辦公

2018-06-01 15:48:22

2018-06-02 13:37:00

2012-03-27 10:53:56

石油開采超級計算機

2021-04-20 19:21:50

臟讀MySQL幻讀

2023-08-31 22:17:15

JavaMySQLB+樹

2015-06-11 11:21:12

免費Wi-Fi

2013-12-30 10:10:50

Windows XP

2018-07-10 11:18:31

私有云混合云遷移

2021-05-18 10:53:00

電腦不關機壽命

2020-06-09 08:19:25

微服務網站架構
點贊
收藏

51CTO技術棧公眾號

国产美女娇喘av呻吟久久| 精品国产乱码一区二区三区| 久久久久久久久久久黄色| 日韩av电影在线免费播放| 一级黄色片大全| 欧美日韩尤物久久| 91社区在线播放| 全亚洲最色的网站在线观看| 老熟妇一区二区| 男人天堂久久| 亚洲午夜成aⅴ人片| 国产在线精品日韩| 樱花视频在线免费观看| 国产精品a久久久久| 亚洲视频电影图片偷拍一区| 性生活在线视频| 亚洲1234区| 性久久久久久久久久久久| 亚洲国产精品123| 蜜桃久久一区二区三区| 91影院在线播放| 成人自拍视频网| 亚洲高清免费一级二级三级| 亚洲精品乱码视频| 亚洲av成人精品毛片| 韩国欧美国产1区| 国产mv免费观看入口亚洲| 久久久久久久蜜桃| 91日韩视频| 国产一区二区激情| 一本色道久久hezyo无码| 日本午夜精品久久久久| 欧美午夜激情视频| 奇米影视亚洲色图| 国产激情在线视频| 欧美国产精品专区| 欧美凹凸一区二区三区视频| 欧美自拍偷拍第一页| 国产在线播精品第三| 国产精品免费在线免费| 日本一区二区视频| 久久午夜无码鲁丝片午夜精品| 国产一区二区三区四区| 亚洲国产日韩欧美综合久久| 免费欧美一级片| 伊人久久大香线蕉综合影院首页| 色视频一区二区| 春日野结衣av| xxxxx性欧美特大| 精品美女国产在线| 欧美 日韩 国产 高清| 国内高清免费在线视频| 亚洲一区二区三区四区五区黄| 亚洲AV无码成人精品一区| 91在线免费看| 亚洲欧美在线高清| 免费观看中文字幕| 免费黄色在线| 亚洲精品国产精华液| 超碰10000| 国产精品—色呦呦| 婷婷综合久久一区二区三区| 欧美无砖专区免费| 91色在线看| 精品久久久久久久久久| 日韩欧美在线播放视频| 免费成人直播| 一本色道久久综合狠狠躁的推荐 | 色94色欧美sute亚洲线路二| 成年网站在线免费观看| 97成人超碰| 欧美久久久久久蜜桃| 免费看的av网站| 亚洲一区二区电影| 日韩久久精品电影| 精品人伦一区二区三电影 | 女人色极品影院| heyzo中文字幕在线| 欧美日韩免费网站| 999在线观看| 亚洲一区二区三区日本久久九| 亚洲аv电影天堂网| 精品少妇一区二区三区免费观| 国产精品欧美在线观看| 久久人体大胆视频| 国产一级视频在线播放| 三级一区在线视频先锋| 91精品久久久久久久久久久| 亚洲国产精品久久久久久6q| 97久久超碰国产精品电影| 亚洲7777| 成人超碰在线| 欧美三级资源在线| wwwww在线观看| 综合伊思人在钱三区| 久久久精品免费| 国产又大又黄又粗| 国产美女在线观看一区| 国产精品av一区| www日韩tube| 亚洲线精品一区二区三区 | 成人免费av电影| 日韩欧美自拍偷拍| x88av在线| 一区免费在线| 国产精品美乳在线观看| 亚洲va欧美va| 国产精品热久久久久夜色精品三区| 在线视频一二三区| 婷婷激情一区| 日韩精品专区在线| 卡一卡二卡三在线观看| 亚洲国产免费看| 成人免费午夜电影| 可以在线观看的黄色| 亚洲午夜免费福利视频| 日本三级黄色网址| 牛牛精品成人免费视频| 美女视频久久黄| 无码人妻aⅴ一区二区三区有奶水| 精品亚洲国内自在自线福利| 国产欧美综合精品一区二区| 免费在线看黄色| 国产日产欧美一区二区视频| 色综合电影网| av在线免费网站| 91久久精品一区二区| 岛国av免费观看| 小说区亚洲自拍另类图片专区| 欧美亚洲日本网站| 亚洲va天堂va欧美ⅴa在线| 国产精品美女久久久久aⅴ| 国产精品欧美激情在线观看| 2023国产精华国产精品| 久久这里有精品| 在线永久看片免费的视频| 99综合电影在线视频| 99热这里只有精品免费| av在线精品| 日韩一级黄色av| 中文在线最新版天堂| 久久精品人人爽人人爽| 免费无码国产v片在线观看| 成人资源在线| 久久久久久久av| 国产精品亚洲lv粉色| 日韩美女啊v在线免费观看| 在线观看免费黄网站| 一区二区美女| 日韩美女在线观看一区| 欧美日韩影视| 一本久久a久久精品亚洲| aa片在线观看视频在线播放| 国产日韩精品视频一区二区三区 | 精品久久久久中文字幕小说 | 波多野结衣在线一区| 大胆欧美熟妇xx| 综合欧美亚洲| 久久免费在线观看| 黑人乱码一区二区三区av| 亚洲在线视频一区| 精品影片一区二区入口| 国产欧美在线| 欧美一区二区三区在线播放| 日日夜夜天天综合| 在线观看国产成人av片| 91好色先生tv| 一区二区三区波多野结衣在线观看| av在线网站免费观看| 欧美fxxxxxx另类| 超碰97人人在线| 黄色激情在线播放| 一区二区日韩精品| 国产丝袜视频在线观看| 亚洲成年人网站在线观看| 亚洲国产欧美视频| 麻豆视频观看网址久久| 日韩在线视频在线| 婷婷成人影院| 国产欧美日韩视频| 蜜臀av在线| 亚洲无限av看| 国产精品爽爽久久久久久| 亚洲一级在线观看| a级片在线观看| 国产在线精品不卡| 18岁网站在线观看| 99re6这里只有精品| 国产成人一区二区三区免费看| 英国三级经典在线观看| www.日韩系列| 欧美一级特黄aaaaaa| 色婷婷久久久综合中文字幕| 91久久国产综合| av亚洲精华国产精华| 欧美精品性生活| 亚洲调教视频在线观看| 日韩动漫在线观看| 粉嫩一区二区三区四区公司1| 国产精品第三页| heyzo中文字幕在线| 在线亚洲国产精品网| 嫩草影院一区二区| 欧美日韩视频在线第一区 | 精品白丝av| 亚洲韩国在线| 国产精品香蕉| 91九色国产视频| 成人免费看黄| 欧美夫妻性生活xx| 春暖花开成人亚洲区| 精品国产麻豆免费人成网站| 亚洲中文字幕在线一区| 精品久久久久久久中文字幕| 日韩欧美中文字幕视频| 中文字幕免费观看一区| 国产精品边吃奶边做爽| 国产精品亚洲一区二区三区在线| 欧洲熟妇精品视频| 日韩午夜免费视频| 美女av免费观看| 日韩啪啪电影网| 欧美精品一区在线发布| 国产无遮挡裸体免费久久| 国产精品自拍偷拍| 亚洲承认视频| 国产91精品久久久久久| 青草在线视频| 美女精品视频一区| 美女国产在线| 日韩在线不卡视频| 阿v免费在线观看| 亚洲欧美日韩国产中文| 日本免费不卡视频| 日韩欧美在线网站| 国产日本精品视频| 欧美肥妇毛茸茸| 一级特黄色大片| 欧美日韩1234| 在线观看免费观看在线| 精品视频在线免费看| 不卡av电影在线| 一本色道久久综合亚洲精品按摩| 圆产精品久久久久久久久久久| 亚洲午夜精品久久久久久久久| 欧美日韩精品亚洲精品| 亚洲综合色视频| 国产一二三四在线| 亚洲成人久久影院| 国产在线拍揄自揄拍| 亚洲国产成人91porn| 国产污视频在线看| 午夜私人影院久久久久| 日韩视频免费观看高清| 欧美日韩国产综合视频在线观看中文| 亚洲国产精一区二区三区性色| 亚洲在线视频一区| 亚洲国产成人精品激情在线| 欧美日韩在线影院| 在线永久看片免费的视频| 欧美在线一区二区| 亚洲天堂网在线视频| 3d成人动漫网站| www.成人免费视频| 亚洲国产高清高潮精品美女| 欧美视频综合| 亚洲最新av在线| 国产福利在线播放麻豆| 欧美极品美女电影一区| 成人一级福利| 国产精品男人的天堂| 久久99精品久久久野外观看| 国产精品一区二区不卡视频| 日韩精品丝袜美腿| 亚洲电影一二三区| 欧美激情第8页| 黄色片网址在线观看| 三级久久三级久久| 国产无遮挡猛进猛出免费软件 | 激情综合电影网| 午夜精品久久久内射近拍高清| 免费成人av资源网| 精品人妻一区二区乱码| av成人动漫在线观看| a级大片在线观看| 国产精品久久久久aaaa| 久视频在线观看| 欧美性猛交丰臀xxxxx网站| 这里只有精品9| 欧美成人乱码一区二区三区| 免费在线毛片| 久久五月情影视| 1234区中文字幕在线观看| 国产成人久久久| 日本精品视频| 日韩av电影免费在线观看| 88国产精品视频一区二区三区| 少妇av一区二区三区无码| 男男视频亚洲欧美| 亚洲精品无码一区二区| 欧美国产精品一区二区| 一级片免费网址| 欧美精品第1页| 青青视频在线观| 久久91亚洲精品中文字幕奶水| 中国字幕a在线看韩国电影| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲a级精品| 大荫蒂性生交片| 蜜桃精品视频在线| 超碰97在线资源站| 一区二区三区国产豹纹内裤在线| 日本一区二区三区久久| 亚洲国产私拍精品国模在线观看| 成人黄色在线电影| 国产精品专区一| 国产欧美日韩精品高清二区综合区| 日韩久久久久久久久久久久| 久久aⅴ国产欧美74aaa| 成人午夜福利一区二区| 亚洲午夜激情av| 精品国自产在线观看| 少妇久久久久久| 性欧美1819sex性高清| 久草热久草热线频97精品| 国产精品第十页| 熟妇女人妻丰满少妇中文字幕| 国产精品美女久久福利网站| 波多野结衣一区二区三区四区| 亚洲精品成人免费| 国模私拍一区二区国模曼安| 国产精品免费一区二区三区四区 | 成人国产在线看| 国产在线播放一区| 国产中文字幕久久| 欧美三级三级三级| 国产一级在线| 日韩av免费在线| 亚洲小说图片| 免费黄色福利视频| 久久久蜜桃精品| 色屁屁影院www国产高清麻豆| 日韩电影中文 亚洲精品乱码 | 国产啪精品视频网站| 欧美精品乱码| 中文字幕av不卡在线| 国产精品久久久久影视| 中文字幕av免费观看| 在线看福利67194| 日韩亚洲国产免费| 中文字幕久久综合| 国产一区二区三区免费看| 国产精品成人69xxx免费视频| 欧美猛男gaygay网站| av黄在线观看| 高清视频一区| 国产人成精品一区二区三| 在线免费播放av| 色综合久久久久久久| 国产精品麻豆一区二区三区| 国产精品第一第二| 亚洲欧美综合久久久| 亚洲丝袜在线观看| 亚洲国产日韩精品| 香蕉视频免费看| 国产精品久久久av| 午夜片欧美伦| 亚洲美女精品视频| 日韩欧美精品中文字幕| 国产高清在线| 川上优av一区二区线观看| 国精品一区二区三区| 久久精品老司机| 欧美日韩一级片网站| 福利在线导航136| 鲁丝一区二区三区免费| 免费成人你懂的| 久久久久香蕉视频| 亚洲久久久久久久久久久| 欧美在线一级| 无码av天堂一区二区三区| 久久久久久麻豆| 97在线播放免费观看| 国内精久久久久久久久久人| 久久99久久人婷婷精品综合| 日韩成人av免费| 欧美日韩国内自拍| 在线日本中文字幕| 国产三区精品| 六月丁香综合在线视频| 国产第一页第二页| 亚洲一区www| 在线精品自拍| 国产九九热视频| 岛国av在线不卡| 亚洲国产高清av| 美女精品自拍一二三四| 久久综合色综合| 色偷偷偷综合中文字幕;dd| 精品国内亚洲2022精品成人|