https://www.cnblogs.com/xunzhi/p/6023190.html

public class SecondActivity extends AppCompatActivity {    private WebView wb;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        wb = (WebView) findViewById(R.id.web);        WebSettings webSettings = wb.getSettings();        //设置可以访问文件        webSettings.setAllowFileAccess(true);        //设置支持缩放        webSettings.setBuiltInZoomControls(true);        webSettings.setJavaScriptEnabled(true);        //设置Web视图        wb.setWebViewClient(new webViewClient ());        //加载数据        wb.loadUrl("https://www.baidu.com/");    }    @Override    //设置回退    //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法    public boolean onKeyDown(int keyCode, KeyEvent event) {        if ((keyCode == KeyEvent.KEYCODE_BACK) && wb.canGoBack()) {            wb.goBack(); //goBack()表示返回WebView的上一页面            return true;        }        finish();//结束退出程序        return false;    }   //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开    private class webViewClient extends WebViewClient {        public boolean shouldOverrideUrlLoading(WebView view, String url) {            view.loadUrl(url);            return true;        }    }}

webView的优化

    webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小    webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小    webView.loadUrl("https://hao.360.cn/?a1004");    webSettings.setAllowFileAccess(true); //设置可以访问文件    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口    webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片    webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

1、设置WebView 缓存模式

private void initWebView() {            mWebView.getSettings().setJavaScriptEnabled(true);              mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);              mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);  //设置 缓存模式              // 开启 DOM storage API 功能              mWebView.getSettings().setDomStorageEnabled(true);              //开启 database storage API 功能              mWebView.getSettings().setDatabaseEnabled(true);               String cacheDirPath = getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;      //      String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;              Log.i(TAG, "cacheDirPath="+cacheDirPath);              //设置数据库缓存路径              mWebView.getSettings().setDatabasePath(cacheDirPath);              //设置  Application Caches 缓存目录              mWebView.getSettings().setAppCachePath(cacheDirPath);              //开启 Application Caches 功能              mWebView.getSettings().setAppCacheEnabled(true);            }

2.优先使用缓存:

private void initcaCheMode() {    //缓存模式如下:    //LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据    //LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。    //LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.    //LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载    webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能    webSettings.setDatabaseEnabled(true);   //开启 database storage API 功能    webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能    String cacheDirPath = getFilesDir().getAbsolutePath() + "webjs/caChe";    webSettings.setAppCachePath(cacheDirPath); //设置  Application Caches 缓存目录}

3、清除缓存

/**          * 清除WebView缓存          */          public void clearWebViewCache(){              //清理Webview缓存数据库              try {                  deleteDatabase("webview.db");                   deleteDatabase("webviewCache.db");              } catch (Exception e) {                  e.printStackTrace();              }              //WebView 缓存文件              File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);              Log.e(TAG, "appCacheDir path="+appCacheDir.getAbsolutePath());              File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache");              Log.e(TAG, "webviewCacheDir path="+webviewCacheDir.getAbsolutePath());              //删除webview 缓存目录              if(webviewCacheDir.exists()){                  deleteFile(webviewCacheDir);              }              //删除webview 缓存 缓存目录              if(appCacheDir.exists()){                  deleteFile(appCacheDir);              }       }

 4、在使用WebView加载网页的时候,有一些固定的资源文件如js/css/图片等资源会比较大,如果直接从网络加载会导致页面加载的比较慢,而且会消耗比较多的流量。所以这些文件应该放在assets里面同app打包。

5.webview的setwebCharomeClient 中 标题 onReceivedTitle 加载进度onProgressChanged 方法

 webView.setWebChromeClient(new WebChromeClient(){            //获取网站标题            @Override            public void onReceivedTitle(WebView view, String title) {                super.onReceivedTitle(view, title);                webtitle.setText(title);            }            //获取网站加载进度            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);                if(newProgress < 100){                    String progress = newProgress + "%";                    tvLoading.setText(progress);                }else if(newProgress == 100){                    String progress = newProgress + "%";                    tvLoading.setText(progress);                }            }        });

更多相关文章

  1. android 代码实现通知 音效和震动
  2. android 设置seekBar 和Progress背景色
  3. Android(安卓)textview中某些字段设置点击监听
  4. android子菜单&&组菜单
  5. Android的TextView设置padding无效
  6. Android(安卓)Gallery获取滑动停止的位置
  7. Glide回调设置Bitmap对象
  8. 自定义PopupWindow动画效果
  9. Android(安卓)联网设置

随机推荐

  1. 【Android】实现全屏、无标题栏效果
  2. 使用android快速开发框架afinal的FinalDb
  3. android 按键处理的全流程梳理(realtek)
  4. Android设置Settings:预读取设置的选项和
  5. android recovery模式及ROM制作
  6. 【Android】Support兼容包详解
  7. Android:数据存取之Preferences
  8. Android版本更新知识(检测、升级)总结
  9. 定制一个Android的Launcher(Home)
  10. Android入门:架构与组件