当我们在使用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. packagecom.robin;
  2. importcom.robin.R;
  3. importandroid.app.Activity;
  4. importandroid.app.Dialog;
  5. importandroid.app.ProgressDialog;
  6. importandroid.content.Context;
  7. importandroid.content.DialogInterface;
  8. importandroid.os.Bundle;
  9. importandroid.os.Handler;
  10. importandroid.os.Message;
  11. importandroid.util.Log;
  12. importandroid.view.View;
  13. importandroid.view.Window;
  14. importandroid.webkit.DownloadListener;
  15. importandroid.webkit.WebChromeClient;
  16. importandroid.webkit.WebSettings;
  17. importandroid.webkit.WebSettings.RenderPriority;
  18. importandroid.webkit.WebView;
  19. importandroid.widget.Button;
  20. importandroid.widget.Toast;
  21. /**
  22. *@authorAdministrator
  23. *
  24. */
  25. publicclassMyActivityextendsActivity{
  26. privateWebViewwebView;
  27. finalstaticStringTAG="MyActivity";
  28. Handlerhandler=newHandler();
  29. booleanblockLoadingNetworkImage=false;
  30. //staticlongt=0;
  31. //staticlongt1=0;
  32. Stringlink;
  33. protectedvoidonCreate(BundlesavedInstanceState){
  34. super.onCreate(savedInstanceState);
  35. link=getIntent().getStringExtra("url");
  36. setContentView(R.layout.news_details);
  37. webView=(WebView)findViewById(R.id.webView);
  38. webView.getSettings().setBuiltInZoomControls(true);
  39. webView.getSettings().setJavaScriptEnabled(true);
  40. webView.getSettings().setRenderPriority(RenderPriority.HIGH);
  41. webView.getSettings().setBlockNetworkImage(true);
  42. blockLoadingNetworkImage=true;
  43. webView.setWebChromeClient(newWebChromeClient(){
  44. publicvoidonProgressChanged(WebViewview,intprogress){
  45. //ActivitiesandWebViewsmeasureprogresswithdifferent
  46. //scales.
  47. //Theprogressmeterwillautomaticallydisappearwhenwereach
  48. //100%
  49. //Log.i(TAG,"progress:"+progress);
  50. if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing())
  51. loadingProgressDialog.setProgress(progress);
  52. if(progress>=100){
  53. /*if(t==0)
  54. t=System.currentTimeMillis()-t1;
  55. else
  56. t=(t+System.currentTimeMillis()-t1)>>1;
  57. t1=System.currentTimeMillis()-t1;
  58. Log.i(TAG,"t:"+t/1000+"t1:"+t1/1000);*/
  59. if(blockLoadingNetworkImage)
  60. {
  61. webView.getSettings().setBlockNetworkImage(false);
  62. blockLoadingNetworkImage=false;
  63. }
  64. if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing())
  65. dismissDialog(PROGRESS_DIALOG_CONNECTING);
  66. }
  67. }
  68. });
  69. Runnabler=newRunnable(){
  70. publicvoidrun(){
  71. webView.loadUrl(link);
  72. //t1=System.currentTimeMillis();
  73. Log.i(TAG,"url:"+link);
  74. showDialog(PROGRESS_DIALOG_CONNECTING);
  75. }
  76. };
  77. handler.postDelayed(r,200);
  78. }
  79. protectedvoidonResume(){
  80. super.onResume();
  81. if(webView.getProgress()<100)
  82. showDialog(PROGRESS_DIALOG_CONNECTING);
  83. }
  84. protectedvoidonDestroy(){
  85. webView.stopLoading();
  86. webView.destroy();
  87. super.onDestroy();
  88. }
  89. finalstaticintPROGRESS_DIALOG_CONNECTING=1000;
  90. ProgressDialogloadingProgressDialog=null;
  91. @Override
  92. protectedDialogonCreateDialog(intid){
  93. switch(id){
  94. casePROGRESS_DIALOG_CONNECTING:{
  95. ProgressDialogprogressDialog=newProgressDialog(this);
  96. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  97. progressDialog.setMessage(getResources()
  98. .getString(R.string.loading));
  99. loadingProgressDialog=progressDialog;
  100. returnprogressDialog;
  101. }
  102. default:
  103. break;
  104. }
  105. returnnull;
  106. }
  107. protectedvoidonPrepareDialog(intid,Dialogdialog){
  108. super.onPrepareDialog(id,dialog);
  109. switch(id){
  110. casePROGRESS_DIALOG_CONNECTING:{
  111. loadingProgressDialog.setMax(100);
  112. dialog.show();
  113. }
  114. break;
  115. default:
  116. break;
  117. }
  118. }
  119. }

更多相关文章

  1. Android(安卓)ApiDemos示例解析(129):Views->Layout Animation->
  2. Android菜鸟笔记-Fragment日常使用记录
  3. Android的ImageSwitcher和TextSw-android学习之旅(三十四)
  4. Android实现多图选择
  5. eclipse 中设置android emulator 选项
  6. android 动态加载布局文件三种方法
  7. Android获取assets文件夹中的数据并写入SD卡示例
  8. Android(安卓)ApiDemos示例解析(80):Graphics->Sweep
  9. Android(安卓)使用动态加载框架DL进行插件化开发

随机推荐

  1. [Android] 基于 Linux 命令行构建 Androi
  2. Android(安卓)如何使用GPU硬件加速
  3. android media库中external的读取
  4. android 所有布局属性和UI控件
  5. android ListView没有数据时信息显示
  6. 【Android开发学习01】与Android实体设备
  7. Android中RelativeLayout各个属性的含义
  8. 使用android兼容包android-support-v4.ja
  9. android uiautomator自己主动化測试
  10. Android内存管理机制