这几天用csdn的手机版,觉得用户体验不错,和我们的产品类似,也是采用webview来加载的页面,区别是它他每加载一个页面,都会启用一个新的webview来加载。
        我们安卓平台只有一个webview,进入链接后返回,原来的页面还需要重新加载,因此不能回到原来进入新闻的地方。ios没有这个问题,因为ios的wkwebview自带页面缓存功能,返回刚才访问的页面,不需要重新加载。这个问题安卓平台的crosswalk貌似单webview解决不了,只好采用多页面,用户每次打开新的页面,打开一个webview来加载网页解决。
        重载了主页面webview1的控制逻辑,判断如果是首页或是登陆页面用webview1打开。否则采用webview2打开,webview2的控制逻辑改为如果加载的不是当前页面的url的话,用一个新的webview2加载。上机跑了一下。发现从首页进入第二个页面没有问题,但是从第二个页面进入第三个页面就不行了,程序直接退出。反编译了csdn的源代码,发现他有好多个activity,没有细研究为什么他可以接受用户无限多的访问,每次访问都启动一个新的activity。考虑我们不可能写那么多activity来支撑用户无限多的访问。我们只是首页要求返回后回到刚才访问过的地方,其他页面没有那么大的要求,因此就按照两个webview实现了一个版本,首页一个,其他页公用一个。
         晚上回家突然想到,在二级页面activity2不可以启动一个和自己同样class的activity,我可以再写一个新的activity3,调用它没有问题,然后在activity3里面我可以再启动activity2,这样既可以避免写无限多个activity,也符合安卓系统的不可以在页面中启动和自己相同class的activity的规定。
         第二天尝试了一下,做了3个webview,一个主页面webview1,两个二级页面webview2, webview3 ,加载顺序为 webview1-->webview2-->webview3-->webview2-->webview3........, 两个二级webview互相启动。实现了用户打开新页面的时候,每次都启动一个新的webview。
        修改二级页面点击返回键的安卓代码处理逻辑,判断当前没有历史记录可以访问的时候,直接将当前的activity关闭
        采用3个webview的方式后,需要修改H5代码来配合修改。首先是sessionstorage的东西在不同标签页是传递不了的,全部改为了localstorage来保存token等数据。
        在二级页面上点击返回时需要将当前窗口关闭。判断如果是crosswalk浏览器,并且版本大于2的时候,调用window.close();将当前窗口关闭。兼容了安卓历史版本和其他的版本。
        返回上一级页面后,可能需要上一级页面刷新一次。但是安卓浏览器是没有页面激活事件的,采用的办法是当页面激活 的时候,在安卓代码中调用全局js方法通知页面,让页面根据localstorage的变量来处理。
        遇到的另外一个问题是需要一次返回多级页面的问题。解决办法是在写了一个全局的js方法,集中处理所有的返回事件,如果需要返回多级页面,并且是多webview版本的时候,用localstorage保存一个变量,记录页面需要返回的页数,当前页面返回。在全局响应激活js方法中,判断如果localstorage下存在这个返回变量,减小这个变量,然后关闭当前界面。这样,每经过一个页面,这个值就会减小1,直到0,就把这个变量删掉。用js实现了多级页面返回。
        用户在二级页面点击更新版本的时候,启动一个新的线程来下载安装包,下载结束后需要启动安装程序来启动安装,但是这个时候很有可能用户已经退出了启动线程的页面,能不能启动安装程序就是个问题。实际测试发现没有问题。程序仍然能够启动安装程序。
        不同页面切换的时候,总是出现白屏的现象,考虑可能是在onpause和onresume的时候webview的显示和隐藏有关系,屏蔽webview的这两行代码,效果好多了。但是系统默认的效果是左右切换,效果不如“今日头条”的效果好。参考 http://my.oschina.net/u/556624/blog/102552 调整了页面切换的方式。比较大的页面还是没有他的流畅,但是新闻详情页面切换和他一样流畅。这个就是后续H5优化的事情了

安卓app单webview改为多webview加载网页相关推荐

  1. flutter webview 无法加载网页错误提示:ERR_NAME_NOT_RESOLVED 解决方法

    问题: 之前用flutter写了一个app,里面包括一个网页显示页面,当时测试的时候一切正常.但是今天重新运行发现app的其他功能正常但是无法加载网页,错误提示如下: 网页无法打开 位于 https: ...

  2. Android Native APP开发笔记:使用WebView控件加载网页

    文章目录 目的 基础使用 处理网页导航 加载本地网页 Web和Native之间交互 调试Web应用 处理页面重绘 总结 目的 WebView是一个比较常用的控件,功能上也比较单一,就是用来加载网页的, ...

  3. 关于安卓webview加载网页黑屏、部分黑屏或blank的解决方法

    很多朋友在利用安卓的webview加载网页的时候 可能会出现黑屏现象 这种情况出现在Android4.4版本以上比较多 第一点的版本可能是blank空白.然后 有些朋友会在不断的修改webview的一 ...

  4. 跨平台应用开发进阶(四十六)webview方式嵌套H5应用加载慢解决方案

    文章目录 一.前言 二.优化建议 三.实施方案 3.1 优化项目结构,减小项目组包体积 3.2 去除项目冗余字体文件 3.2.1 字体筛选 3.2.2 字体压缩 3.3 gzip压缩 3.4 ETag ...

  5. Android使用WebView加载网页及数据

    今天主要介绍一下Android的一个原生组件-WebView. 在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如: webView.loadUrl("http://www.b ...

  6. Flutter中举步维艰的WebView,终于实现了加载本地html

    1.需求背景 实现一个不全屏的,支持加载本地html资源的webview 2.结论先行 选用了官方的webview_flutter.总结了下实践的过程,分析几个插件有如下特点: flutter_ina ...

  7. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  8. android webview gettitle,Android-webview加载网页去除标题

    在进行app开发时,我们会经常遇到webview加载一个网址的情况,但是仅仅是webview.loadUrl()并不能满足我们的需求,因为一般网页上面都有一个标题,,标题的颜色和我们的app风格可能整 ...

  9. webview加载html跳转,WebView加载网页(二)

    WebView加载网页(二) 一.实现目标 1.实现一个页面activity_main.xml,该页面上面有一个TextView和两个WebView,一个WebView显示百度首页,另一个WebVie ...

最新文章

  1. PK朱广权的手语数字人,现在要到医院银行上岗了
  2. 151. 翻转字符串里的单词
  3. Tesseract使用日记
  4. 软 件 学 院 实践环节报告
  5. Linux多线程编程实例解析
  6. 解决.net core 读取json文件中文乱码的问题
  7. 惠普1020打印机驱动安装教程
  8. OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program.
  9. 怎样打开t6系统服务器,t6客户端如何连接服务器
  10. 如何设计神经网络结构,如何设计一个神经网络
  11. Z490 AORUS PRO AX+i9-10850K黑苹果EFI引导文件
  12. 【计算专业】有趣的拓扑学问题 动画演示
  13. 【BIM技术】BIM技术解释及全生命周期应用详细解释
  14. MEM/MBA数学基础(08)数据分析
  15. 【通俗易懂的通信】马尔可夫过程Ⅱ:马尔可夫链中的状态,常返、非常返
  16. IE8 的开发人员工具 出不来了 怎么办?
  17. Excel 基础常用函数(一)
  18. 防火墙内外网隔离实例
  19. Python 生成器(generator)详细总结+示例
  20. 华为新系统鸿蒙升级时间,好消息确定!鸿蒙之后华为全新系统发布,只期待升级尝鲜...

热门文章

  1. input type=“radio“默认按钮选中状态
  2. java 工作流 jbpm,J2EE工作流管理系统jBPM详解(一)(4)
  3. 推荐10个优质的前端公众号
  4. composite java_组合模式(Composite)——Java
  5. 前端大文件上传断点续传解决方案
  6. Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)
  7. k8s安装tekton,编写task
  8. 加权平均资本成本【读书笔记】
  9. 机器学习算法(线性回归)-Lect01
  10. python调用笔记本摄像头