App中Web缓存机制
来源:互联网 发布:买吉他知乎 编辑:程序博客网 时间:2024/05/20 02:24
Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端web颁发一个Cookie。客户端会自动创建一个SQLit数据库web会把Cookie自动保存进去。
当web再请求该网站时,web会把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
webview加载web网页时会自动的把cookie保存到手机磁盘根目录(data/data/package_name/databases/webviewCookiesChromium.db)下。
页面缓存
页面缓存是指加载一个网页时的html、JS、CSS等页面或者资源数据。这些缓存资源是由于浏览器的行为而产生 。
当web请求网站时会把 这些页面缓存自动创建一个webviewCacheChromium文件夹保存在磁盘中。
webview加载web网页时会自动把页面缓存保存在手机磁盘根目录(data/data/package_name/cache/webviewCacheChromium)下。
测试总结
1. 清除App缓存时,Cookie不会移除(这里指在点击手机管理应用程序里面该App清除缓存按钮);
2. 清除App缓存时,页面缓存 会移除(这里指在点击手机管理应用程序里面该App清除缓存按钮);
3. 清除App数据时,Cookie、页面缓存 会被移除(这里指在点击手机管理应用程序里面该App清除数据按钮);
4. 卸载App重新安装,Cookie、页面缓存 都会被移除;
5. 通过代码也可以使Cookie、页面缓存 移除等(见下面代码);
关键代码
/** * webView加载网页cookie的一些操作 */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private WebView webView; private TextView textView; private EditText editText; private Button cleanButton, urlButton, cookieButton,cacheButton; private String url = "http://192.168.17.151/sample.aspx"; private String cookie; private int i = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); loadWebView(); } private void initView() { webView = (WebView) findViewById(R.id.webview); textView = (TextView) findViewById(R.id.cookie_text); cleanButton = (Button) findViewById(R.id.clean_button); urlButton = (Button) findViewById(R.id.url_button); cookieButton = (Button) findViewById(R.id.web_button); cacheButton = (Button) findViewById(R.id.clean_cache_button); cleanButton.setOnClickListener(this); urlButton.setOnClickListener(this); cookieButton.setOnClickListener(this); cacheButton.setOnClickListener(this); } /** * 加载网页 */ private void loadWebView() { WebSettings settings = webView.getSettings(); settings.setSupportZoom(true); //支持缩放 settings.setBuiltInZoomControls(true); //启用内置缩放装置 settings.setJavaScriptEnabled(true); //启用JS脚本// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不走缓存,重新加载新的页面 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); webView.loadUrl(url); cookie = CookieManager.getInstance().getCookie(url); showCookies(cookie); } /** * 显示当前Cookies */ private void showCookies(String cookies) { if (!StringUtils.isEmpty(cookies)) { textView.setText("当前Cookie: " + cookies); Log.d("cookie32", "cookie222== " + cookies); } } /** * 同步一下cookie */ public static void synCookies(Context context, String url, String cookies) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.removeSessionCookie();//移除 cookieManager.setCookie(url, cookies);//cookies是在HttpClient中获得的cookie CookieSyncManager.getInstance().sync(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.clean_button: //下面代码清除App里面的缓存的cookie数据 CookieSyncManager.createInstance(this); CookieManager.getInstance().removeAllCookie(); CookieSyncManager.getInstance().sync(); break; case R.id.clean_cache_button: //下面是清除App缓存 webView.cleanCache(true); break; case R.id.url_button: webView.loadUrl(url); break; case R.id.web_button://设置cookie i++; synCookies(MainActivity.this, url, "cookie test = " + i); webView.loadUrl(url); cookie = CookieManager.getInstance().getCookie(url); showCookies(cookie); break; } }}
这里对cookie的操作主要用到 CookieSyncManager 和 CookieManager 两个类。
详情请看:CookieSyncManager官方API
CookieManager官方API
- App中Web缓存机制
- 【转】【Web缓存机制概述】5 – Web App时代的缓存机制新思路 & 全文总结
- 【Web缓存机制概述】5 – Web App时代的缓存机制新思路 & 全文总结
- 【Web缓存机制系列】6 – 进击的Hybrid App,量身定做缓存机制
- 【Web缓存机制系列】6 – 进击的Hybrid App,量身定做缓存机制
- 【Web缓存机制系列】6 – 进击的Hybrid App,量身定做缓存机制
- APP中缓存、加载与刷新机制设计
- web缓存—机制
- Web缓存机制浅析
- web缓存机制
- Web缓存机制简介
- web缓存机制
- Web--聊聊Web缓存机制
- 关于web开发中静态资源缓存机制的总结
- Cookie和Web缓存机制
- web缓存机制——浏览器缓存
- Hibernate中缓存机制
- Http中缓存机制
- iOS UITableViewCell滑动删除
- SQL AVG 函数
- 音乐播放器
- spark 相关使用
- Android 混淆代码
- App中Web缓存机制
- 数据集成:Flume和Sqoop
- android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
- cocopods借鉴别人的代码以及自己应用总结
- SQL COUNT() 函数
- ffmpeg支持的codec
- Soap UI:设置
- 百度天气预报接口介绍
- 【Linux】管理在线用户