Android WebView详解(加速加载篇)

当我们在使用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:
 

package com.robin;    import com.robin.R;  import android.app.Activity;  import android.app.Dialog;  import android.app.ProgressDialog;  import android.content.Context;  import android.content.DialogInterface;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message;  import android.util.Log;  import android.view.View;  import android.view.Window;  import android.webkit.DownloadListener;  import android.webkit.WebChromeClient;  import android.webkit.WebSettings;  import android.webkit.WebSettings.RenderPriority;  import android.webkit.WebView;  import android.widget.Button;  import android.widget.Toast;    /**   * @author Administrator   *    */ public class MyActivity extends Activity {  private WebView webView;  final static String TAG = "MyActivity";  Handler handler = new Handler();  boolean blockLoadingNetworkImage=false;  //static long t=0;  //static long t1=0;  String link;  protected void onCreate(Bundle savedInstanceState) {  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(new WebChromeClient() {  public void onProgressChanged(WebView view, int progress) {  // Activities and WebViews measure progress with different  // scales.  // The progress meter will automatically disappear when we reach  // 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);  }  }  });  Runnable r = new Runnable() {  public void run() {  webView.loadUrl(link);  //t1=System.currentTimeMillis();  Log.i(TAG, "url:" + link);  showDialog(PROGRESS_DIALOG_CONNECTING);  }  };  handler.postDelayed(r, 200);    }    protected void onResume() {  super.onResume();  if (webView.getProgress() < 100)  showDialog(PROGRESS_DIALOG_CONNECTING);  }    protected void onDestroy() {  webView.stopLoading();  webView.destroy();  super.onDestroy();  }    final static int PROGRESS_DIALOG_CONNECTING = 1000;  ProgressDialog loadingProgressDialog = null;    @Override protected Dialog onCreateDialog(int id) {  switch (id) {  case PROGRESS_DIALOG_CONNECTING: {  ProgressDialog progressDialog = new ProgressDialog(this);  progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  progressDialog.setMessage(getResources()  .getString(R.string.loading));  loadingProgressDialog = progressDialog;  return progressDialog;  }  default:  break;  }  return null;  }    protected void onPrepareDialog(int id, Dialog dialog) {  super.onPrepareDialog(id, dialog);  switch (id) {  case PROGRESS_DIALOG_CONNECTING: {  loadingProgressDialog.setMax(100);  dialog.show();  }  break;  default:  break;  }  }    }


原文来自:雨枫技术教程网 http://www.fengfly.com
原文网址:http://www.fengfly.com/plus/view-206565-1.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值