`
CshBBrain
  • 浏览: 637565 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:142028
Group-logo
HTML5移动开发
浏览量:135359
社区版块
存档分类
最新评论

Android WebView详解(加速加载篇)

 
阅读更多

转自: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:
 
  1. package com.robin;  
  2.  
  3.  
  4. import com.robin.R;  
  5. import android.app.Activity;  
  6. import android.app.Dialog;  
  7. import android.app.ProgressDialog;  
  8. import android.content.Context;  
  9. import android.content.DialogInterface;  
  10. import android.os.Bundle;  
  11. import android.os.Handler;  
  12. import android.os.Message;  
  13. import android.util.Log;  
  14. import android.view.View;  
  15. import android.view.Window;  
  16. import android.webkit.DownloadListener;  
  17. import android.webkit.WebChromeClient;  
  18. import android.webkit.WebSettings;  
  19. import android.webkit.WebSettings.RenderPriority;  
  20. import android.webkit.WebView;  
  21. import android.widget.Button;  
  22. import android.widget.Toast;  
  23.  
  24.  
  25. /**  
  26.  * @author Administrator  
  27.  *   
  28.  */ 
  29. public class MyActivity extends Activity {  
  30. private WebView webView;  
  31. final static String TAG = "MyActivity";  
  32. Handler handler = new Handler();  
  33. boolean blockLoadingNetworkImage=false;  
  34. //static long t=0;  
  35. //static long t1=0;  
  36. String link;  
  37. protected void onCreate(Bundle savedInstanceState) {  
  38. super.onCreate(savedInstanceState);  
  39. link = getIntent().getStringExtra("url");  
  40. setContentView(R.layout.news_details);  
  41.  
  42.  
  43. webView = (WebView) findViewById(R.id.webView);  
  44. webView.getSettings().setBuiltInZoomControls(true);  
  45. webView.getSettings().setJavaScriptEnabled(true);  
  46. webView.getSettings().setRenderPriority(RenderPriority.HIGH);  
  47. webView.getSettings().setBlockNetworkImage(true);  
  48. blockLoadingNetworkImage=true;  
  49. webView.setWebChromeClient(new WebChromeClient() {  
  50. public void onProgressChanged(WebView view, int progress) {  
  51. // Activities and WebViews measure progress with different  
  52. // scales.  
  53. // The progress meter will automatically disappear when we reach  
  54. // 100%  
  55. //Log.i(TAG, "progress:" + progress);  
  56. if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing())  
  57. loadingProgressDialog.setProgress(progress);  
  58. if (progress >= 100) {  
  59. /*if(t==0)  
  60. t=System.currentTimeMillis()-t1;  
  61. else  
  62. t=(t+System.currentTimeMillis()-t1)>>1;  
  63. t1=System.currentTimeMillis()-t1;  
  64. Log.i(TAG, "t:" + t/1000+" t1:"+t1/1000);*/ 
  65. if(blockLoadingNetworkImage)  
  66. {  
  67. webView.getSettings().setBlockNetworkImage(false);  
  68. blockLoadingNetworkImage=false;  
  69. }  
  70. if (loadingProgressDialog!=null&&loadingProgressDialog.isShowing())  
  71. dismissDialog(PROGRESS_DIALOG_CONNECTING);  
  72. }  
  73. }  
  74. });  
  75. Runnable r = new Runnable() {  
  76. public void run() {  
  77. webView.loadUrl(link);  
  78. //t1=System.currentTimeMillis();  
  79. Log.i(TAG, "url:" + link);  
  80. showDialog(PROGRESS_DIALOG_CONNECTING);  
  81. }  
  82. };  
  83. handler.postDelayed(r, 200);  
  84.  
  85.  
  86. }  
  87.  
  88.  
  89. protected void onResume() {  
  90. super.onResume();  
  91. if (webView.getProgress() < 100)  
  92. showDialog(PROGRESS_DIALOG_CONNECTING);  
  93. }  
  94.  
  95.  
  96. protected void onDestroy() {  
  97. webView.stopLoading();  
  98. webView.destroy();  
  99. super.onDestroy();  
  100. }  
  101.  
  102.  
  103. final static int PROGRESS_DIALOG_CONNECTING = 1000;  
  104. ProgressDialog loadingProgressDialog = null;  
  105.  
  106.  
  107. @Override 
  108. protected Dialog onCreateDialog(int id) {  
  109. switch (id) {  
  110. case PROGRESS_DIALOG_CONNECTING: {  
  111. ProgressDialog progressDialog = new ProgressDialog(this);  
  112. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  113. progressDialog.setMessage(getResources()  
  114. .getString(R.string.loading));  
  115. loadingProgressDialog = progressDialog;  
  116. return progressDialog;  
  117. }  
  118. default:  
  119. break;  
  120. }  
  121. return null;  
  122. }  
  123.  
  124.  
  125. protected void onPrepareDialog(int id, Dialog dialog) {  
  126. super.onPrepareDialog(id, dialog);  
  127. switch (id) {  
  128. case PROGRESS_DIALOG_CONNECTING: {  
  129. loadingProgressDialog.setMax(100);  
  130. dialog.show();  
  131. }  
  132. break;  
  133. default:  
  134. break;  
  135. }  
  136. }  
  137.  
  138.  
分享到:
评论

相关推荐

    实例详解Android Webview拦截ajax请求

    本篇内容主要给大家讲解了Android Webview拦截ajax请求的详细讲解,需要的朋友一起来学习一下。

    Android WebView 缓存详解

    Android WebView 缓存详解 一. 两种缓存类型: 页面缓存:加载一个网页时的html、JS、CSS等页面或者资源数据,这些缓存资源是由于浏览器 的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地...

    详解android 用webview加载网页(https和http)

    主要介绍了详解android 用webview加载网页(https和http),详细的介绍了两个错误的解决方法,有兴趣的可以了解一下

    Android Webview添加网页加载进度条实例详解

    主要介绍了Android Webview添加网页加载进度条实例详解的相关资料,需要的朋友可以参考下

    Android Webview 加载 H5Video

    都是关键代码片段,因为每个项目每个人产生的问题不同,Video在webview中加载不出来原因很多,可能是客户端少了参数,也可能是前端出了问题,经过研究后对Android WebView 加载H5Video标签做此详解。 博客地址 ...

    详解Android WebView加载html片段

    本篇文章主要介绍了详解Android WebView加载html片段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解Android Webview加载网页时发送HTTP头信息

    主要介绍了详解Android Webview加载网页时发送HTTP头信息的相关资料,需要的朋友可以参考下

    Android WebView线性进度条实例详解

    推荐阅读:Android Webview添加网页加载进度条实例详解 先给大家展示下效果图:这个效果图大家一看就懂,在生活经常见到 1.wevbview_progressbar.xml &lt;layer-list xmlns:android=...

    详解android webView独立进程通讯方式

    webView 加载网页的时候可能占用大量内存,导致应用程序OOM。 webView 在访问结束的时候可以直接杀死该进程,防止内存泄漏。 webView 在崩溃的时候不影响主进程。 webView独立进程需要注意什么 由于进程之间内存...

    Android中webview与JS交互、互调方法实例详解

    Android中webview与JS交互、互调方法实例详解 前言: 对于试水的功能,一般公司都会采用H5的方式来开发,可以用很少的资源与很短的项目工期来完成。 但许多情况下,H5页面会需要一些原生持有的一些如用户信息之类的...

    Android开发中使用WebView控件浏览网页的方法详解

    项目中遇到数学展示问题,常规的Textview显示处理不了数学公式,利用图片生成对服务器又产生较大压力,经过查询,可以通过webview加载JS实现。IOS同样的方法也可实现,但JS渲染效率远高于安卓。对Webview做下总结。 ...

    Android典型技术模块开发详解

    第三篇 Android开发基础详解 第7章 常用控件 7.1 Button(按钮) 7.2 ImageButton(图片按钮) 7.3 ToggleButton(开关按钮) 7.4 TextView(文本视图) 7.5 ImageView(图片视图) 7.6 EditText(编辑框) 7.7 ...

    Android中实现WebView和JavaScript的互相调用详解

    主要给大家介绍了关于Android中实现WebView和JavaScript的互相调用的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友下面来一起看看吧。

    android开发资料大全

    android用户界面之WebView教程实例汇总 android用户界面之GridView教程实例汇总 android用户界面之SurfaceView教程实例汇总 android用户界面之Notification教程实例汇总 android用户界面之TextView教程实例汇总 ...

    Android pdf viewer在android studio应用问题说明详解

    android studio主要用WebView来加载发布好的WebApp,打包生产APP。 其中由于显示一些pdf文档,所以研究了一下,记录一下心得,同时也希望帮助到新手们。 android 显示网络pdf,基本原理:先将pdf文件通过Download...

    详解 WebView 与 JS 交互传值问题

    随着混合开发模式比较流行,很多时候,我们需要在原生的基础上,使用 WebView 加载网页,这样控制更加方便。今天我们来看看,如何将 Java 对象 和 List 集合传值给 JS 调用。 如何将 Java 对象实例传值给 JS 其实将...

Global site tag (gtag.js) - Google Analytics