第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

WEBVIEW 詳細設(shè)置

標(biāo)簽:
Android
  1. public class MainActivity extends Activity {  

  2.     final String COMPANY_WEB="http://www.csdn.net";  

  3.     private WebView mWebView;  

  4.   

  5.     @Override  

  6.     protected void onCreate(Bundle savedInstanceState) {  

  7.         super.onCreate(savedInstanceState);  

  8.         setContentView(R.layout.activity_main);  

  9.         mWebView = (WebView) findViewById(R.id.webview);  

  10.         setWebView();  

  11.           

  12.     }  

  13.   

  14.     private void setWebView(){  

  15.         WebSettings webSettings = mWebView.getSettings();  

  16.           webSettings.setJavaScriptEnabled(true);    

  17.           webSettings.setAllowFileAccess(true);    

  18.           webSettings.setBuiltInZoomControls(true);    

  19.           webSettings.setPluginsEnabled(true);  

  20.           

  21.         mWebView.setWebViewClient(new MonitorWebClient());  

  22.           

  23.         mWebView.loadUrl(COMPANY_WEB);  

  24.     }  

  25.       

  26.     private class MonitorWebClient extends WebViewClient{  

  27.   

  28.         @Override  

  29.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  

  30.               

  31.             super.onPageStarted(view, url, favicon);  

  32.         }  

  33.           

  34.         @Override  

  35.         public void onPageFinished(WebView view, String url) {  

  36.               

  37.             super.onPageFinished(view, url);  

  38.         }  

  39.   

  40.         @Override  

  41.         public boolean shouldOverrideUrlLoading(WebView view, final String url) {  

  42.             String website=Uri.parse(url).getHost();  

  43.               

  44.             if (COMPANY_WEB.equals(website)) {  

  45.                     // This is my web site, so do not override; let my WebView load the page  

  46.                     return false;  

  47.               }else{  

  48.                  view.loadUrl(url);            

  49.                  return true;   

  50.              }  

  51.         //  return super.shouldOverrideUrlLoading(view, url);  

  52.         }  

  53.     }  

  54.       

  55.     @Override  

  56.     public boolean onKeyDown(int keyCode, KeyEvent event)  

  57.     {  

  58.         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())  

  59.         {  

  60.             mWebView.goBack();  

  61.             return true;  

  62.         }  

  63.         return super.onKeyDown(keyCode, event);  

  64.     }  

  65.       

  66. }  



相关权限:


[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <uses-permission android:name="android.permission.INTERNET" />  

  2.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

  3.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  



ok,测试了一下相关链接也可以出现正常访问,以上是以csdn网站为例,如果将网站换成http://www.qq.com开始也没有问题,点击导航栏也可以正常访问,再点击图片连接就会出现 eventhub.removemessages(int what = 107) is not supported before the webviewcore is set up异常信息,有人说是没有以http://开头,这个也试了一下,没有解决问题,期待有人能解决。回过头来在首页点击相关新闻链接后会发现出现空白页无法正常访问,后来研究发现这个和网站结构有关系,看来webview并不能完全实现浏览器功能。

接下来就是简单的异常处理了,主要就是重写WebViewClient类中的onReceivedError()方法和onReceivedSslError()方法来进行处理了。

说完异常简单处理后再来说说提高网站的访问速度,尤其是带有大量的flash,swf动画和各种css样式功能,这个时候我们就应该使用缓存了,适当的设置缓存大小以及合适的模式来进行优化了,webview有两种模式可设置如下:

1,LOAD_DEFAULT,根据cache-control决定是否从网络上取数据。
2,LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:m.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要打开过一次,都使用缓存。
m.sina.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。

总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。


好说的也差不多了,来看一下优化后的代码:


[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. public class MainActivity extends Activity {  

  2.   

  3.     final String COMPANY_WEB="http://www.deczh.com/";  

  4.     private WebView mWebView;  

  5.     private Context activity;  

  6. //  private ProgressDialog progressDialog;  

  7.     //history web site  

  8. //  private Stack<String> webHistory=new Stack<String>();  

  9.       

  10.     @Override  

  11.     protected void onCreate(Bundle savedInstanceState) {  

  12.         super.onCreate(savedInstanceState);  

  13.         setContentView(R.layout.activity_main);  

  14.         mWebView = (WebView) findViewById(R.id.webview);  

  15.         setWebView();  

  16.         activity=this;  

  17.         mHandler.sendEmptyMessageDelayed(0, 1000);  

  18.     }  

  19.       

  20.     private void setWebView(){  

  21.         WebSettings webSettings = mWebView.getSettings();  

  22.          //java script  

  23.           webSettings.setJavaScriptEnabled(true);    

  24.           webSettings.setJavaScriptCanOpenWindowsAutomatically(true);  

  25.           // access Assets and resources  

  26.           webSettings.setAllowFileAccess(true);    

  27.           //zoom page  

  28.           webSettings.setBuiltInZoomControls(false);    

  29.           webSettings.setPluginsEnabled(true);  

  30.           webSettings.setPluginState(WebSettings.PluginState.ON);  

  31.             

  32.           //提高渲染的优先级  

  33.           webSettings.setRenderPriority(RenderPriority.HIGH);    

  34.           webSettings.setEnableSmoothTransition(true);  

  35.           //Cache开启和设置  

  36.          // 一个页面的 图片\js\css 载入过之后  

  37.         //在服务器设置的文件有效期内,每次请求,会去服务器检查文件最后修改时间,如果一致,不会重新下载,而是使用缓存  

  38.           String appCachePath = mContext.getDir("netCache", Context.MODE_PRIVATE).getAbsolutePath();  

  39.           webSettings.setAppCacheEnabled(true);  

  40.           webSettings.setAppCachePath(appCachePath);  

  41.           webSettings.setAppCacheMaxSize(1024*1024*5);  

  42.           //会影响时时刷新结果  

  43.         //  webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  

  44.           //LocalStorage相关设置  

  45.         //  像首页的DOM,第一次载入,需要从服务器ajax请求接口json配置数据,然后用js从模板中渲染拼接成DOM,显示在页面中  

  46.         //由于Android webview的JS处理很慢,这里把第一次渲染后的DOM存入LocalStorage中,以后打开页面不用请求API和JS渲染,优先加载页面,和Cache配置,速度会快很多  

  47.         //但是Android webview的LocalStorage有个问题,关闭APP或者重启后,就清楚了,所以需要下面browser.getSettings().setDatabase相关的操作,把LocalStoarge存到DB中  

  48.           webSettings.setDatabaseEnabled(true);  

  49.           webSettings.setDomStorageEnabled(true);  

  50.           String databasePath = mContext.getDir("databases", Context.MODE_PRIVATE).getPath();  

  51.           webSettings.setDatabasePath(databasePath);  

  52.           

  53.         mWebView.setWebViewClient(new MonitorWebClient());  

  54.         mWebView.setWebChromeClient(new AppCacheWebChromeClient());  

  55.     }  

  56.       

  57.     private class MonitorWebClient extends WebViewClient{  

  58.   

  59.         @Override  

  60.         public void onReceivedError(WebView view, int errorCode,  

  61.                 String description, String failingUrl) {  

  62.             //错误提示  

  63.             Toast toast = Toast.makeText(getBaseContext(), "Oh no! " + description,  

  64.                     Toast.LENGTH_LONG);  

  65.             toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);  

  66.             toast.show();  

  67.             //错误处理  

  68.             try {  

  69.                 mWebView.stopLoading();  

  70.             } catch (Exception e) {  

  71.             }  

  72.             try {  

  73.                 mWebView.clearView();  

  74.             } catch (Exception e) {  

  75.             }  

  76.             if (mWebView.canGoBack()) {  

  77.                 mWebView.goBack();  

  78.             }  

  79.         //  super.onReceivedError(view, errorCode, description, failingUrl);  

  80.         }  

  81.         //当load有ssl层的https页面时,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框  

  82.         @Override  

  83.         public void onReceivedSslError(WebView view, SslErrorHandler handler,  

  84.                 SslError error) {  

  85.             //忽略证书的错误继续Load页面内容  

  86.              handler.proceed();  

  87.             //handler.cancel(); // Android默认的处理方式  

  88.              //handleMessage(Message msg); // 进行其他处理  

  89.         //  super.onReceivedSslError(view, handler, error);  

  90.         }  

  91.   

  92.         @Override  

  93.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  

  94.              /*if (progressDialog == null) { 

  95.                  // If no progress dialog, make one and set message 

  96.                  progressDialog = new ProgressDialog(activity); 

  97.                  progressDialog.setMessage("Loading please wait..."); 

  98.                  progressDialog.show(); 

  99.                  // Hide the webview while loading 

  100.                  mWebView.setEnabled(false); 

  101.              }*/  

  102.               

  103.         //  super.onPageStarted(view, url, favicon);  

  104.         }  

  105.           

  106.         @Override  

  107.         public void onPageFinished(WebView view, String url) {  

  108.            /* if (progressDialog != null&&progressDialog.isShowing()) { 

  109.                 progressDialog.dismiss(); 

  110.                 progressDialog = null; 

  111.                 mWebView.setEnabled(true); 

  112.             }*/  

  113.               

  114.             /*if(!webHistory.contains(url)) 

  115.                 webHistory.push(url);*/  

  116.               

  117.         //  super.onPageFinished(view, url);  

  118.         }  

  119.   

  120.         @Override  

  121.         public boolean shouldOverrideUrlLoading(WebView view, final String url) {   Log.e(getClass().getSimpleName(), "website= "+url);  

  122.         //  String website=Uri.parse(url).getHost();  

  123.             String processUrl=url;  

  124.             if(!processUrl.startsWith("http://"))  

  125.                 processUrl="http://"+processUrl;  

  126.               

  127.             if (COMPANY_WEB.equals(url)) {  

  128.                // This is my web site, so do not override; let my WebView load the page  

  129.                  return false;  

  130.               }  

  131.             else{  

  132.                  view.loadUrl(processUrl);            

  133.                  return true;   

  134.              }  

  135.         //   return super.shouldOverrideUrlLoading(view, url);  

  136.         }  

  137.     }  

  138.       

  139.      private class AppCacheWebChromeClient extends WebChromeClient {  

  140.             @Override  

  141.             public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {  

  142.             //    Log.e(APP_CACHE, "onReachedMaxAppCacheSize reached, increasing space: " + spaceNeeded);  

  143.                 quotaUpdater.updateQuota(spaceNeeded * 2);  

  144.             }  

  145.         }  

  146.        

  147.     private boolean pause=false;  

  148.     @Override  

  149.     public void onPause() {  

  150.         super.onPause();  

  151.         if (mWebView != null) {  

  152.             mWebView.pauseTimers();  

  153.             mWebView.onPause();  

  154.             this.pause=true;  

  155.         }  

  156.     }  

  157.   

  158.     @Override  

  159.     public void onResume() {  

  160.         super.onResume();  

  161.         if (mWebView != null&&pause) {  

  162.             mWebView.resumeTimers();  

  163.             mWebView.onResume();  

  164.             this.pause=false;  

  165.         }  

  166.     }  

  167.       

  168.     @Override  

  169.     public boolean onKeyDown(int keyCode, KeyEvent event)  

  170.     {  

  171.         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()){  

  172.             mWebView.goBack();  

  173.             return true;  

  174.         }  

  175.          

  176.         return super.onKeyDown(keyCode, event);  

  177.     }  

  178.       

  179.       

  180. }  

原文链接:http://www.apkbus.com/blog-85568-59738.html

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消