安卓app单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加载网页相关推荐
- flutter webview 无法加载网页错误提示:ERR_NAME_NOT_RESOLVED 解决方法
问题: 之前用flutter写了一个app,里面包括一个网页显示页面,当时测试的时候一切正常.但是今天重新运行发现app的其他功能正常但是无法加载网页,错误提示如下: 网页无法打开 位于 https: ...
- Android Native APP开发笔记:使用WebView控件加载网页
文章目录 目的 基础使用 处理网页导航 加载本地网页 Web和Native之间交互 调试Web应用 处理页面重绘 总结 目的 WebView是一个比较常用的控件,功能上也比较单一,就是用来加载网页的, ...
- 关于安卓webview加载网页黑屏、部分黑屏或blank的解决方法
很多朋友在利用安卓的webview加载网页的时候 可能会出现黑屏现象 这种情况出现在Android4.4版本以上比较多 第一点的版本可能是blank空白.然后 有些朋友会在不断的修改webview的一 ...
- 跨平台应用开发进阶(四十六)webview方式嵌套H5应用加载慢解决方案
文章目录 一.前言 二.优化建议 三.实施方案 3.1 优化项目结构,减小项目组包体积 3.2 去除项目冗余字体文件 3.2.1 字体筛选 3.2.2 字体压缩 3.3 gzip压缩 3.4 ETag ...
- Android使用WebView加载网页及数据
今天主要介绍一下Android的一个原生组件-WebView. 在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如: webView.loadUrl("http://www.b ...
- Flutter中举步维艰的WebView,终于实现了加载本地html
1.需求背景 实现一个不全屏的,支持加载本地html资源的webview 2.结论先行 选用了官方的webview_flutter.总结了下实践的过程,分析几个插件有如下特点: flutter_ina ...
- android动态设置错误页面,Android中替换WebView加载网页失败时的页面
我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...
- android webview gettitle,Android-webview加载网页去除标题
在进行app开发时,我们会经常遇到webview加载一个网址的情况,但是仅仅是webview.loadUrl()并不能满足我们的需求,因为一般网页上面都有一个标题,,标题的颜色和我们的app风格可能整 ...
- webview加载html跳转,WebView加载网页(二)
WebView加载网页(二) 一.实现目标 1.实现一个页面activity_main.xml,该页面上面有一个TextView和两个WebView,一个WebView显示百度首页,另一个WebVie ...
最新文章
- PK朱广权的手语数字人,现在要到医院银行上岗了
- 151. 翻转字符串里的单词
- Tesseract使用日记
- 软 件 学 院 实践环节报告
- Linux多线程编程实例解析
- 解决.net core 读取json文件中文乱码的问题
- 惠普1020打印机驱动安装教程
- OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program.
- 怎样打开t6系统服务器,t6客户端如何连接服务器
- 如何设计神经网络结构,如何设计一个神经网络
- Z490 AORUS PRO AX+i9-10850K黑苹果EFI引导文件
- 【计算专业】有趣的拓扑学问题 动画演示
- 【BIM技术】BIM技术解释及全生命周期应用详细解释
- MEM/MBA数学基础(08)数据分析
- 【通俗易懂的通信】马尔可夫过程Ⅱ:马尔可夫链中的状态,常返、非常返
- IE8 的开发人员工具 出不来了 怎么办?
- Excel 基础常用函数(一)
- 防火墙内外网隔离实例
- Python 生成器(generator)详细总结+示例
- 华为新系统鸿蒙升级时间,好消息确定!鸿蒙之后华为全新系统发布,只期待升级尝鲜...
热门文章
- input type=“radio“默认按钮选中状态
- java 工作流 jbpm,J2EE工作流管理系统jBPM详解(一)(4)
- 推荐10个优质的前端公众号
- composite java_组合模式(Composite)——Java
- 前端大文件上传断点续传解决方案
- Eureka工作原理(Eureka简介Eureka ServerEureka Client自我保护机制分布式系统中的CAP理论Eureka 工作流程)
- k8s安装tekton,编写task
- 加权平均资本成本【读书笔记】
- 机器学习算法(线性回归)-Lect01
- python调用笔记本摄像头