上一篇文章讲到了webview技术方面的优化(没有看到的朋友可以看看http://blog.csdn.net/fkingu007/article/details/44650031),这次进一步完善一下,主要完成状态保留工作,也是解决了我的一个疑问,下面看看如何做到的。

转载请标明文章出处 http://blog.csdn.net/fkingu007/article/details/44675129,尊重原创。

1、  activity意外被杀

上个博文已经说到了,在onSaveInstanceState(Bundle)调用webview.saveState(bundle)保存状态,在onCreate(Bundle saveInstanceState)里通过savedInstanceState == null判断,不为null,即可通过webview.restoreState(bundle)恢复,这里不多讲了。

2、用户正常back

我们都知道back是不会触发onSaveInstanceState()方法的,那么我们就得通过其他途径保存状态了,哈哈,研究发现可以通过webview.getContentHeight(),webview.getSrollY()得到滚动位置所占html页面实际内容长度的比例,由于html加载内容可能显示不完全,getContentHeight()的值很有可能是会变化的,所以我们最好算出这个百分比,下次恢复的时候也根据百分比再滚动,思路有了,代码实现就没问题啦,下面是关键代码:

// 计算当前滚动位置所占网页内容的百分比private float calculateProgression(WebView content) {float positionTopView = content.getTop();float contentHeight = content.getContentHeight();float currentScrollPosition = content.getScrollY();float percentWebview = (currentScrollPosition - positionTopView) / contentHeight;Log.e(TAG, "positionTopView:"+positionTopView);Log.e(TAG, "contentHeight:"+contentHeight);Log.e(TAG, "currentScrollPosition:"+currentScrollPosition);Log.e(TAG, "percentWebview:"+percentWebview);return percentWebview;}

onDestory()里保留一下这个值:

@Overrideprotected void onDestroy() {mProgressToRestore = calculateProgression(wv);ll.removeAllViews();wv.stopLoading();wv.removeAllViews();wv.destroy();wv = null;ll = null;super.onDestroy();}

WebViewClient.onPageFinished()里进行滚动,加一个标志位只跳转一次

@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubif (mHasToRestoreState && 0<mProgressToRestore) {mHasToRestoreState = false;view.postDelayed(new Runnable() {@Overridepublic void run() {float webviewsize = wv.getContentHeight() - wv.getTop();float positionInWV = webviewsize * mProgressToRestore;int positionY = (int) (wv.getTop() + positionInWV);wv.scrollTo(0, positionY);}// 延迟一下}, 100);}super.onPageFinished(view, url);Log.d(TAG, "pageFinished:"+url);}

就是这么做到的,大家可以试试效果。

Android webview用户体验优化-场景恢复相关推荐

  1. CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点

    摘要: 深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算.网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了<海量短视频极速分发>的主题分享,带领我们从视频内容采集.上 ...

  2. 深度剖析短视频分发过程中的用户体验优化技术点

    2018深圳云栖大会已经圆满落幕,在飞天技术汇-弹性计算.网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了<海量短视频极速分发>的主题分享,带领我们从视频内容采集.上传.存储和 ...

  3. 网络产品用户体验优化系列[一]概要

    网络产品用户体验优化系列[一]概要 很高兴能在这里和大家专门沟通用户体验方面的话题,特别是能够收集大家对网络产品用户体验的反馈,以及网络产品团队在用户体验方面的优化和更新.这个系列我们只谈用户体验. ...

  4. 如何构建用户体验优化体系?

    在前几期的直播中,我们为大家介绍了监控和日志相关的一些内容.监控分为三个阶段,基础监控.应用监控.业务监控.前面我们已经分享了基础监控的部分,今天主要为大家带来用户体验优化的一些分享. 用户体验,是指 ...

  5. Silverlight用户体验优化

    Silverlight用户体验优化 在发布Silverlight应用后有一个需要考虑的重要问题是:假如访客没有安装Silverlight,你就需要提供无缝的Silverlight安装体验,使用户体验中 ...

  6. 【转载】专家答疑:Silverlight的用户体验优化

    原文地址:专家答疑:Silverlight的用户体验优化 专家答疑:Silverlight的用户体验优化 作者: 博客园, 出处:博客, 责任编辑: 杜飞, 2010-01-29 13:18 在发布S ...

  7. 移动端SEO之用户体验优化提升方法

    移动端SEO之用户体验优化,前面一篇江西SEO曾庆平讲完了 移动站响应式的实现,我们再扩展一下,看看移动端网站还可以在哪些用户体验上面做提升. 1.一键拨号 如果需要在移动浏览器中实现一键拨号的功能, ...

  8. android 8.0 用户体验优化--day02

    每当疲惫的时候,那就停下脚步,遥想追逐的远方,恢复力量再上路:每当困惑的时候,那就停下脚步,梳理纷乱的思绪,驱走迷茫再上路:每当痛苦的时候,那就停下脚步,抚摸流血的伤口,擦干眼泪再上路:每当放弃的时候 ...

  9. android 微信webview,android实现用户体验超棒的微信WebView进度条

    现在微信的用户体验一直被产品经理们所推崇,今天这里具体分析一下微信在WebView的进度条上怎么提升用户体验. 最终微信的加载进度条的效果图 网络正常的状态,分为两种加载速度,前部分正常速度加载,后边 ...

最新文章

  1. Python剑指offer:矩形覆盖问题
  2. 40岁了,还要跟小年青一样埋头敲代码吗?
  3. Google的三篇大数据思想论文
  4. LeetCode 1318. 或运算的最小翻转次数(位运算)
  5. postgresql数据库的 to_date 和 to_timestamp 将 字符串转换为时间格式
  6. IO操作 第二篇 学习(转载)
  7. 【服务器防护】centos iptables 防火墙设置 mac过滤
  8. 给模型自动赋予贴图代码
  9. mysql 手册及优化
  10. win7安装打印机 计算机,win7添加网络打印机的详细步骤【图解】
  11. win10不下载开热点的软件来开启无线热点
  12. 项目实战:如何制作报表?
  13. Google Chrome73~81版本浏览器的跨域问题解决方案
  14. tomcat java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit异常解决
  15. 电脑白屏或黑屏解决方法
  16. C语言实现,输入某年某月某日,判断这一天是这一年的第几天?
  17. AT1983 [AGC001E] BBQ Hard
  18. 33-viper 配置文件加载
  19. linux hba查看,各操作系统查看HBA和WWN的方法
  20. Bugku 杂项 细心的大象

热门文章

  1. python 生日悖论_python自学日记6——列表
  2. MySQL5.7绿色版卸载及安装配置
  3. 使用 RT-AK 部署 Cifar10 模型至 Art-Pi
  4. 现代汽车收购波士顿机器人公司80%的股份
  5. 微软人工智能九步学习法
  6. 气候统计分析笔记之气象数据的预白化(WS2001)
  7. 教你用RNN实现人工智能写作
  8. 得了精神疾病的人,最后会变成什么样子?
  9. linux两台机器间实现无密远程登录(使用证书)
  10. 如何查看 Windows 服务器中的登录事件