WebView简介(加速加载篇)
2012-04-24 14:52
253 查看
转自:http://blog.csdn.net/hudashi/article/details/7301042
当我们在使用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;
}
}
}
当我们在使用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;
}
}
}
相关文章推荐
- WebView简介(加速加载篇)
- WebView简介(加速加载篇)
- Android WebView详解(加速加载篇)
- WebView的使用小结--加载加速及缓存机制
- 安卓webview快速加载网页研究提速(一级加速)
- WebView加载加速
- 安卓webview快速加载网页研究提速(二级加速)
- iOS-webView上加载HTML视频不显示缩略图
- WebView加载html5页面
- WebView加载网页不显示图片解决办法
- Android使用WebView加载本地资源
- iOS-webView加载视屏横向全屏播放(video)
- webview加载html格式带图片的数据
- WebView等比例加载网络Html
- iOS开发Webview,加载html代码图片适配
- WebView网页三种不同的数据加载请求方法
- 如何解决Android中的WebView直接加载网页出错?
- iOS 使用WKWebView加载h5页面无法调用拨打电话功能
- Android webView 中loadData方法加载 带中文时出现乱码