以下是个人拙见,大神可直接忽略。

直接奔入主题,android的一个webview控件相信大家都特别熟悉了,可以用来加载显示网页,像商城的商品图文详情就可以用网页很快实现,但是最近项目中遇到不一样的问题,商品首页用webview显示,点击某一个商品或者商品分类startactivity跳转自身的界面,首页混杂一部分网页加载肯定会遇到界面显示卡顿,显示慢的问题,不过既然需求是这样,也只能照做了。

显示一个网页就不说了,首先,先优化一下显示速度问题,也就是显示文字和图片的先后,在oncreate方法加上下面代码:

    if (Build.VERSION.SDK_INT >= 19) { mWebView.getSettings().setLoadsImagesAutomatically(true); } else { mWebView.getSettings().setLoadsImagesAutomatically(false); }

  在WebViewClient中的onPageFinished方法加入:

if (!mWebView.getSettings().getLoadsImagesAutomatically()) { mWebView.getSettings().setLoadsImagesAutomatically(true); }

  由于可能导致网页显示错误,如果想自定义,在onReceivedError方法中加载自己在本地写的html.

  

  其次就是要实现startActivity点击跳转android界面了,下面两句话极其重要:

mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new WebAppInterface( MyWebShopActivity.this), "startActivity");

  让你的webview支持页面js交互,其中"startActivity" 可以更改,和网页js方法保持一致就行了,然后写入你要点击实现的效果了,要显示一句话,或者跳转界面等...

public class WebAppInterface { Context mContext; WebAppInterface(Context c) { mContext = c; } @JavascriptInterface public void jump_product_detail(final String id) { //TODO 处理代码 } }

  我这里就是下的跳转点击的商品,"jump_product_detail"和上面的"startActivity"一样可以更改,也要保持一致。

  最后,在你自定义处理代码中说一下可能遇到的问题,前端在做网页的时候会加上每一个点击的id,也就是标识,比如你加载时url是"https://www.baidu.com/" ,点击后会变为"https://www.baidu.com/:01" 这样多了id的url,可是这时webview会加载一次这个url,但是这个url是不存在的,所以我们就要重新加载一次原来的URL,注意这里不能用mWebView.loadUrl(url)来加载了,看下面的log输出就知道了:

java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

  处理方法就是改为:

mWebView.post(new Runnable() { @Override public void run() { mWebView.loadUrl(url); //url为初始的值 } });

代替mWebView.loadUrl(url)来加载。

  同样,在你用startActivity启动界面时会出现错误Uncaught Error: Error calling method on NPObject,只需要修改为:

Handler mHandler = new Handler(); mHandler.post(new Runnable() { @Override public void run() { startActivity(new Intent(action, uri)); });

就能较好的解决以上两个容易出现的问题了。

ok, 先这样,还有什么问题想知道的可以在下方评论。

更多相关文章

  1. 视频学习笔记:Android(安卓)ffmpeg解码多路h264视频并显示
  2. Android中各种Adapter的介绍及使用
  3. android UI进阶之用gallery实现可滑动的Tab
  4. 使用AutoFitTextView解决安卓系统字体变更后文字排版错乱的情况
  5. Android(安卓)ActionBar与Menu - 1 - api demos 学习
  6. 主流智能手机屏幕材质介绍
  7. Android:android的框架区别(网络框架、图片异步加载与缓存框架、数
  8. [开源]在iOS上实现Android风格的控件Toast
  9. Android屏幕锁屏弹窗的正确姿势DEMO详解

随机推荐

  1. Android(安卓)SDK是什么
  2. Android(安卓)常用权限和使用说明
  3. android 精确定位
  4. Android(安卓)Studio 初次见面(AVD加速)
  5. Android(安卓)- 简单的查看APP启动时间
  6. Android(安卓)Dialog 对话框详解及示例代
  7. Android8.0 Oreo新特性
  8. Android(安卓)View的onTouch、onClick和o
  9. Android中保存图片到本地功能实现
  10. Android的一个自定义的动态添加Dialog类