转自:http://www.fengfly.com/plus/view-206565-1.html
当我们在使用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;
- }
- }
- }
相关推荐
Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...
Android WebView 加载网页是移动应用开发中的一项基本需求。然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 错误一:加载 HTTPS 请求的网页时,WebView ...
都是关键代码片段,因为每个项目每个人产生的问题不同,Video在webview中加载不出来原因很多,可能是客户端少了参数,也可能是前端出了问题,经过研究后对Android WebView 加载H5Video标签做此详解。 博客地址 ...
Android Webview 提供了页面加载及资源请求的钩子,但是对于 H5 的 Ajax 请求并没有提供干涉的接口。这意味着我们不能在 Webview 中干涉 JavaScript 发起的 HTTP 请求,而有时候我们确实需要能够截获 Ajax 请求并...
Android WebView 实例详解 Android WebView 是 Android 平台中一种特殊的组件,可以在应用程序中显示 web 页面。它基于 WebKit 内核浏览器,提供了一个可以在 Android 应用程序中嵌入网页浏览器的解决方案。 一、...
这篇文档主要探讨了如何详细地使用Android WebView以及如何调用JavaScript,这对于Android ROM开发至关重要。以下是对这些知识点的深入解析: 1. **WebView的使用**: - 首先,你需要在布局XML文件中添加一个...
### Android WebView 开发使用详解 #### 一、WebView简介与应用场景 WebView是Android提供的一种用于显示Web内容的组件。它可以加载HTML页面,并且能够与页面中的JavaScript交互,从而实现更丰富的应用功能。...
【WebView详解】是Android开发中的一个重要知识点,它允许在应用程序中内嵌网页浏览功能,无需启动浏览器即可展示网页内容。这个“WebView详解案例加注释全套”提供了丰富的示例和详细的注释,帮助开发者深入理解和...
### WebView详解 #### 概述 `WebView`是Android平台中用于展示网页内容的一个核心组件。它可以被视为一种轻量级的浏览器,允许开发者在应用程序内部嵌入网页,并提供一系列功能,如网页前后导航、放大缩小、文本...
**Android WebView控件详解** 在Android开发中,WebView控件是一个非常重要的组件,它允许我们在应用程序内部嵌入一个浏览器引擎,展示网页内容。这使得开发者能够实现与网页交互的功能,而无需离开应用本身,极大...
本文将详细介绍如何在Android Webview中添加网页加载进度条的实例。 首先,我们需要创建一个自定义的WebView类,这个类继承自WebView,并添加一个ProgressBar。在自定义的`ProgressWebView`类中,我们初始化一个...
Android WebView加载html片段详解 Android WebView是一种基于Webkit引擎的浏览器组件,经常用于加载HTML页面或片段。今天,我们将详细介绍如何使用Android WebView加载html片段,并对其进行详细的分析。 WebView...
然而,WebView在加载复杂或资源密集型网页时可能会消耗大量内存,甚至导致应用程序出现内存溢出(Out Of Memory, OOM)问题。为了优化性能和提高应用稳定性,开发者有时会选择将WebView放入独立进程运行。这样,在...
Android Webview 加载网页时发送 HTTP 头信息详解 Android Webview 是 Android 系统中一个非常重要的组件,用于显示网页内容。在加载网页时,Webview 会自动发送 HTTP 头信息,这些头信息对于服务器端程序的控制和...
在Android开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内部嵌入网页内容,使得用户可以在不离开应用的情况下浏览网页。以下是对Android WebView的详细解释及其简单实例的阐述。 **1. WebView基本...
### Android WebView 控件的使用详解 #### 一、引言 WebView是Android系统中的一个重要组件,主要用于在应用程序中展示Web页面。它可以帮助开发者快速地集成Web内容到原生应用中,实现网页浏览功能,这对于开发...
- 页面加载慢:可以开启硬件加速,`webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);` - 页面渲染问题:检查CSS样式和图片大小,优化网页资源以适应移动设备。 - 用户交互:例如禁用长按复制粘贴,可重写`...