Android(安卓)WebView详解(加速加载篇)
16lz
2021-01-26
当我们在使用WebView时,如果加载的网友比较大,这加载速度将非常慢。
现总结几种加速WebView加载的方法 1、提高渲染的优先级 webView.getSettings().setRenderPriority(RenderPriority.HIGH); 2、使用 webView.getSettings().setBlockNetworkImage ,把图片加载放在最后来加载渲染。参照示例1 . 3,使用硬件加速,该功能在Android 3.0 (API level 11)才加入。具体参照: http://developer.android.com/guide/topics/graphics/hardware-accel.html 示例1:- packagecom.robin;
- importcom.robin.R;
- importandroid.app.Activity;
- importandroid.app.Dialog;
- importandroid.app.ProgressDialog;
- importandroid.content.Context;
- importandroid.content.DialogInterface;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Message;
- importandroid.util.Log;
- importandroid.view.View;
- importandroid.view.Window;
- importandroid.webkit.DownloadListener;
- importandroid.webkit.WebChromeClient;
- importandroid.webkit.WebSettings;
- importandroid.webkit.WebSettings.RenderPriority;
- importandroid.webkit.WebView;
- importandroid.widget.Button;
- importandroid.widget.Toast;
- /**
- *@authorAdministrator
- *
- */
- publicclassMyActivityextendsActivity{
- privateWebViewwebView;
- finalstaticStringTAG="MyActivity";
- Handlerhandler=newHandler();
- booleanblockLoadingNetworkImage=false;
- //staticlongt=0;
- //staticlongt1=0;
- Stringlink;
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- link=getIntent().getStringExtra("url");
- setContentView(R.layout.news_details);
- webView=(WebView)findViewById(R.id.webView);
- webView.getSettings().setBuiltInZoomControls(true);
- webView.getSettings().setJavaScriptEnabled(true);
- webView.getSettings().setRenderPriority(RenderPriority.HIGH);
- webView.getSettings().setBlockNetworkImage(true);
- blockLoadingNetworkImage=true;
- webView.setWebChromeClient(newWebChromeClient(){
- publicvoidonProgressChanged(WebViewview,intprogress){
- //ActivitiesandWebViewsmeasureprogresswithdifferent
- //scales.
- //Theprogressmeterwillautomaticallydisappearwhenwereach
- //100%
- //Log.i(TAG,"progress:"+progress);
- if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing())
- loadingProgressDialog.setProgress(progress);
- if(progress>=100){
- /*if(t==0)
- t=System.currentTimeMillis()-t1;
- else
- t=(t+System.currentTimeMillis()-t1)>>1;
- t1=System.currentTimeMillis()-t1;
- Log.i(TAG,"t:"+t/1000+"t1:"+t1/1000);*/
- if(blockLoadingNetworkImage)
- {
- webView.getSettings().setBlockNetworkImage(false);
- blockLoadingNetworkImage=false;
- }
- if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing())
- dismissDialog(PROGRESS_DIALOG_CONNECTING);
- }
- }
- });
- Runnabler=newRunnable(){
- publicvoidrun(){
- webView.loadUrl(link);
- //t1=System.currentTimeMillis();
- Log.i(TAG,"url:"+link);
- showDialog(PROGRESS_DIALOG_CONNECTING);
- }
- };
- handler.postDelayed(r,200);
- }
- protectedvoidonResume(){
- super.onResume();
- if(webView.getProgress()<100)
- showDialog(PROGRESS_DIALOG_CONNECTING);
- }
- protectedvoidonDestroy(){
- webView.stopLoading();
- webView.destroy();
- super.onDestroy();
- }
- finalstaticintPROGRESS_DIALOG_CONNECTING=1000;
- ProgressDialogloadingProgressDialog=null;
- @Override
- protectedDialogonCreateDialog(intid){
- switch(id){
- casePROGRESS_DIALOG_CONNECTING:{
- ProgressDialogprogressDialog=newProgressDialog(this);
- progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- progressDialog.setMessage(getResources()
- .getString(R.string.loading));
- loadingProgressDialog=progressDialog;
- returnprogressDialog;
- }
- default:
- break;
- }
- returnnull;
- }
- protectedvoidonPrepareDialog(intid,Dialogdialog){
- super.onPrepareDialog(id,dialog);
- switch(id){
- casePROGRESS_DIALOG_CONNECTING:{
- loadingProgressDialog.setMax(100);
- dialog.show();
- }
- break;
- default:
- break;
- }
- }
- }
更多相关文章
- Android(安卓)ApiDemos示例解析(129):Views->Layout Animation->
- Android菜鸟笔记-Fragment日常使用记录
- Android的ImageSwitcher和TextSw-android学习之旅(三十四)
- Android实现多图选择
- eclipse 中设置android emulator 选项
- android 动态加载布局文件三种方法
- Android获取assets文件夹中的数据并写入SD卡示例
- Android(安卓)ApiDemos示例解析(80):Graphics->Sweep
- Android(安卓)使用动态加载框架DL进行插件化开发