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;
}
}

}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值