首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Android WebView详解(加快加载篇)

2013-02-25 
Android WebView详解(加速加载篇)当我们在使用WebView时,如果加载的网友比较大,这加载速度将非常慢。现总结

Android 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:?
  1. package?com.robin; ??
  2. ?import?com.robin.R; ?
  3. import?android.app.Activity; ?import?android.app.Dialog; ?
  4. import?android.app.ProgressDialog; ?import?android.content.Context; ?
  5. import?android.content.DialogInterface; ?import?android.os.Bundle; ?
  6. import?android.os.Handler; ?import?android.os.Message; ?
  7. import?android.util.Log; ?import?android.view.View; ?
  8. import?android.view.Window; ?import?android.webkit.DownloadListener; ?
  9. import?android.webkit.WebChromeClient; ?import?android.webkit.WebSettings; ?
  10. import?android.webkit.WebSettings.RenderPriority; ?import?android.webkit.WebView; ?
  11. import?android.widget.Button; ?import?android.widget.Toast; ?
  12. ??
  13. /** ??*?@author?Administrator ?
  14. ?*? ??*/?
  15. public?class?MyActivity?extends?Activity?{ ?private?WebView?webView; ?
  16. final?static?String?TAG?=?"MyActivity"; ?Handler?handler?=?new?Handler(); ?
  17. boolean?blockLoadingNetworkImage=false; ?//static?long?t=0; ?
  18. //static?long?t1=0; ?String?link; ?
  19. protected?void?onCreate(Bundle?savedInstanceState)?{ ?super.onCreate(savedInstanceState); ?
  20. link?=?getIntent().getStringExtra("url"); ?setContentView(R.layout.news_details); ?
  21. ??
  22. webView?=?(WebView)?findViewById(R.id.webView); ?webView.getSettings().setBuiltInZoomControls(true); ?
  23. webView.getSettings().setJavaScriptEnabled(true); ?webView.getSettings().setRenderPriority(RenderPriority.HIGH); ?
  24. webView.getSettings().setBlockNetworkImage(true); ?blockLoadingNetworkImage=true; ?
  25. webView.setWebChromeClient(new?WebChromeClient()?{ ?public?void?onProgressChanged(WebView?view,?int?progress)?{ ?
  26. //?Activities?and?WebViews?measure?progress?with?different ?//?scales. ?
  27. //?The?progress?meter?will?automatically?disappear?when?we?reach ?//?100% ?
  28. //Log.i(TAG,?"progress:"?+?progress); ?if(loadingProgressDialog!=null&&loadingProgressDialog.isShowing()) ?
  29. loadingProgressDialog.setProgress(progress); ?if?(progress?>=?100)?{ ?
  30. /*if(t==0) ?t=System.currentTimeMillis()-t1; ?
  31. else ?t=(t+System.currentTimeMillis()-t1)>>1; ?
  32. t1=System.currentTimeMillis()-t1; ?Log.i(TAG,?"t:"?+?t/1000+"?t1:"+t1/1000);*/?
  33. if(blockLoadingNetworkImage) ?{ ?
  34. webView.getSettings().setBlockNetworkImage(false); ?blockLoadingNetworkImage=false; ?
  35. } ?if?(loadingProgressDialog!=null&&loadingProgressDialog.isShowing()) ?
  36. dismissDialog(PROGRESS_DIALOG_CONNECTING); ?} ?
  37. } ?}); ?
  38. Runnable?r?=?new?Runnable()?{ ?public?void?run()?{ ?
  39. webView.loadUrl(link); ?//t1=System.currentTimeMillis(); ?
  40. Log.i(TAG,?"url:"?+?link); ?showDialog(PROGRESS_DIALOG_CONNECTING); ?
  41. } ?}; ?
  42. handler.postDelayed(r,?200); ??
  43. ?} ?
  44. ??
  45. protected?void?onResume()?{ ?super.onResume(); ?
  46. if?(webView.getProgress()?<?100) ?showDialog(PROGRESS_DIALOG_CONNECTING); ?
  47. } ??
  48. ?protected?void?onDestroy()?{ ?
  49. webView.stopLoading(); ?webView.destroy(); ?
  50. super.onDestroy(); ?} ?
  51. ??
  52. final?static?int?PROGRESS_DIALOG_CONNECTING?=?1000; ?ProgressDialog?loadingProgressDialog?=?null; ?
  53. ??
  54. @Override?protected?Dialog?onCreateDialog(int?id)?{ ?
  55. switch?(id)?{ ?case?PROGRESS_DIALOG_CONNECTING:?{ ?
  56. ProgressDialog?progressDialog?=?new?ProgressDialog(this); ?progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); ?
  57. progressDialog.setMessage(getResources() ?.getString(R.string.loading)); ?
  58. loadingProgressDialog?=?progressDialog; ?return?progressDialog; ?
  59. } ?default: ?
  60. break; ?} ?
  61. return?null; ?} ?
  62. ??
  63. protected?void?onPrepareDialog(int?id,?Dialog?dialog)?{ ?super.onPrepareDialog(id,?dialog); ?
  64. switch?(id)?{ ?case?PROGRESS_DIALOG_CONNECTING:?{ ?
  65. loadingProgressDialog.setMax(100); ?dialog.show(); ?
  66. } ?break; ?
  67. default: ?break; ?
  68. } ?} ?
  69. ??
  70. }

热点排行