赞
踩
据路透社报道,推特(Twitter)公司周五宣布,它已经禁止总部位于莫斯科的卡巴斯基实验室在其社交平台上打广告,称这家网络安全公司的商业模式与其广告规则存在冲突,并援引美国政府的说法称卡巴斯基实验室与俄罗斯情报机构有关联。推特通过电子邮件证实了这项封杀令。
欢迎回到周一,新的一周继续加油努力吧!
本篇来自 骑小猪看流星 的投稿,分享了他如何封装X5WebView以及如何在项目中灵活运用的过程 ,一起来看看!希望大家喜欢。
骑小猪看流星 的博客地址:
https://www.jianshu.com/u/0111a7da544b
这一篇的目标就是怎么样快速封装X5WebView,如何有效的同步以及管理Cookie,使用IntentService优化预加载,如何监听进度条等一些在项目中使用的常用功能。
功能需求
需求一:客户端账号密码登录成功以后,调用H5界面(也就是使用X5webView,以下简称X5)。H5界面也需要去记录你的状态,比如你客户端本地登录成功以后,H5界面也需要显示登录成功的状态。那么,客户端和H5如何去同步状态?
需求二:因为X5加载的时候,会有一段时间会显示空白或者卡顿,如何去监听并利用这个进度并优化?
需求三:如何简单封装X5WebView基本功能?
需求一
(针对需求一,我真的是参考了很多哥们的技术博客,然后由于笔者上周也就是3月9号接到的开发需求,其中遇到了很多坑,所以我希望这篇博客可以把这个需求写的详细,尽可能的造福以后遇到同样需求的朋友让他们节约时间少走弯路)
对于Cookie,我们并不是很陌生,这里继续多一嘴,这个Cookie简单理解主要是用来进程保活的,它具有时效性(持久化和非持久化),它是通过服务器的请求,在响应头里面拿到,然后在第二次http请求上以请求头的方式将参数带过去,优点是减少后台查库压力等等,更加具体的可以参考上面的链接文章,那么,在Android中,也就是WebView中,我们如何去管理Cookie?
首先:CookieSyncManager与CookieManager
Android中关于Cookie的说明
早期的cookie是由CookieSyncManager进行管理的,之后CookieSyncManager被抛弃了,换成了CookieManager来进行管理。两个版本的分割线就是Android SDK -- 21。
Android中Cookie的存储位置
目前Android系统WebView是将cookie存储data/data/package_name/app_webview这个目录下的一个叫Cookies的数据中。
CookieSyncManager在内存和存储器之间同步浏览器的cookie。另外,CookieSyncManager的同步策略是在一个独立的线程里定时进行同步。
注意:每次同步的时间间隔是5分钟。
CookieSyncManager类下的常用API介绍
cookie同步策略:
CookieSyncManager.createInstance(context); CookieSyncManager.getInstance().startSync();
cookie停止同步:
CookieSyncManager.getInstance().stopSync()
cookie立即同步:调用了该方法会立即进行cookie的同步,代码如下:
CookieSyncManager.getInstance().sync()
删除cookie操作:
CookieSyncManager.createInstance(this); CookieManager.getInstance().removeAllCookie(); CookieManager.getInstance().removeSessionCookie(); CookieSyncManager.getInstance().sync(); CookieSyncManager.getInstance().startSync();
CookieManager管理cookie:从sdk21之后,webview已经内置了cookie的同步操作了。虽然不再需要关注cookie的同步,但是依然需要掌握删除cookie的操作。
删除cookie操作:底层实现是异步清除数据库的记录
CookieManager.getInstance().removeAllCookies(null);CookieManager.getInstance().flush();
立即同步:注意到这个flush()方法就是立即同步cookie的操作,本质上与CookieSyncManager中的sync()方法是一样的。于是乎,关于同步cookie我们可以有如下简单的写法:
- if (Build.VERSION.SDK_INT <21){
- com.tencent.smtt.sdk.CookieSyncManager.getInstance().sync();}else {
- com.tencent.smtt.sdk.CookieManager.getInstance().flush();}
然后,笔者就遇到了第一个坑,按照如下写法以后,cookie居然神奇的不同步(下面是伪代码,下面是伪代码)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。