A. android webview为什么无法缓存
androd webview是支持缓存的,看看你的开关有没有打开:
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)。
一、网页缓存
1、缓存构成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
WebView缓存文件结构如下图所示
B. android webview 怎么使用本地缓存
android
webview使用本地缓存的话,思路如下:
定义一个离线下载的服务Service
启动后台服务Service来执行异步下载
存储到本地数据库中
每一次加载url之前,先判断数据库是否存在缓存内容
5.如果存在缓存,优先加载本地缓存,如果不存在,才执行联网请求
C. vue在android webview有缓存
Google正式发布了Android O开发者预览版,Pixel、Nexus 5X/6P等手机用户已经可以下载刷机包进行刷机。Android O有哪些新特性?话不多说,奉上Android O新特性汇总详细介绍。
Android O 新特性介绍
Android O 引入了许多新功能和API,以在您的应用程序中使用。下面只是新变化的一部分,你可以在这第一个开发者预览版中尝试体验这些:
后台限制
基于我们在Nougat开始的工作,Android O将提高用户的电池寿命和设备的交互性能作为重中之重。为了实现这一点,我们对后台应用程序可以执行的其他自动限制有三个主要方面:隐式广播,后台服务和位置更新。这些更改将更容易创建对用户设备和电池影响最小的应用。后台限制代表了Android的重大变化,因此我们希望每个开发人员都熟悉它们。有关详细信息,请参阅有关 后台执行限制和后台位置限制的文档。
通知渠道
Android O还引入了通知渠道,这是针对通知内容的新的应用程序定义的类别。频道可让开发人员针对不同类型的通知提供细粒度的控制权限,用户可以单独阻止或更改每个频道的行为,而不是一起管理所有应用的通知。
自动填充API
Android用户已经依赖一系列密码管理器来自动填充登录详细信息和重复信息,这使得设置新应用或更轻松地进行交易。现在,我们通过为自动填充添加平台支持,使整个生态系统中的工作更加轻松。用户可以选择自动填充应用,类似于他们选择键盘应用的方式。自动填充应用程序存储和保护用户数据,如地址,用户名,甚至密码。对于要处理自动填充的应用,我们需要添加新的API来实现自动填充服务。
PIP的手机和新的窗口功能:画中画(PIP)
PIP的手机和新的窗口功能:画中画(PIP)显示现已在手机和平板电脑上,所以用户可以继续观看视频,他们正在回答聊天或打着汽车。应用程序可以从恢复的PiP模式或系统支持的暂停状态将自己置于PiP模式 – 您可以指定宽高比和一组自定义交互(如播放/暂停)。其他新的窗口功能包括应用程序使用的 新应用程序覆盖窗口,而不是系统警报窗口,以及在远程显示器上启动活动的多显示器支持。
XML 中的字体资源
字体现在是Android O中完全支持的资源类型。应用程序现在可以在XML布局中使用字体,也可以在XML中定义字体系列 – 声明字体样式和重量以及字体文件。
自适应图标
为了帮助您更好地与设备UI集成,您现在可以基于设备选择的掩码,创建系统以不同形状显示的 自适应图标。系统还会在启动器,快捷方式,设置,共享对话框和总览屏幕中动画与图标的交互。应用程序的宽色域
成像应用程序的Android开发人员现在可以利用具有宽色域显示功能的新设备。要显示宽色域图片,应用需要在其清单(每个活动)中启用标记,并使用嵌入式宽色配置文件(AdobeRGB,Pro Photo RGB,DCI-P3等)加载位图。
连接
为了最终的音频保真度,Android O现在还支持高品质的蓝牙音频编解码器,如LDAC编解码器。我们还增加了新的Wi-Fi功能,如 Wi-Fi Aware,以前称为邻居感知网络(NAN)。在具有适当硬件的设备上,应用和附近的设备可以通过Wi-Fi发现和通信,而无需互联网接入点。我们正在与我们的硬件合作伙伴一起,尽快为设备带来Wi-Fi Aware技术。
电信框架正在扩展ConnectionService API,以使第三方调用应用程序与System UI集成,并与其他音频应用程序无缝操作。例如,应用可以在不同类型的UI(诸如汽车头单元)中显示和控制他们的呼叫。
键盘导航
随着Chrome操作系统和其他大型设备上Google Play应用的出现,我们发现这些应用中键盘导航的使用正在复苏。在Android O中,我们专注于为“开发者”和“标签”导航创建一个更可靠,可预测的模型,帮助开发人员和最终用户。
AAudio API for Pro Audio
AAudio是一种新的本机API,专为需要高性能,低延迟音频的应用程序而设计。使用AAudio的应用程序通过流读取和写入数据。在开发者预览中,我们发布了这个新API的早期版本,以获取您的反馈。
WebView增强功能
在Android Nougat中,我们为WebView引入了一个可选的多进程模式,将Web内容的处理转移到一个独立的进程中。在Android O中,我们默认启用多处理模式,并添加一个API,让应用处理错误和崩溃,以提高安全性和提高应用程序稳定性。作为进一步的安全措施,您现在可以选择启用应用的WebView对象,以通过Google安全浏览验证网址。
java 8语言API和运行时优化:
Android现在支持几种新的Java语言API,包括新的java.time API。此外,Android运行时比以前更快,在某些应用程序基准上的改进高达2x。
合作伙伴平台贡献
硬件制造商和硅合作伙伴已经加快了O版本中Android平台的修复和增强。例如,索尼已经提供了超过30个功能增强,包括LDAC编解码器和250错误修复Android O.
Android O 开发者预览版下载与更新
Android O 开发者预览版包括一个更新的SDK,其中包含用于在 官方Android模拟器以及Nexus 5X,Nexus 6P,Nexus Player,Pixel,Pixel XL和Pixel C设备上测试的系统映像 。如果您正在构建可穿戴设备,还有一个模拟器可用于在Android O上测试Android Wear 2.0。
我们计划在O Developer Preview中定期更新预览系统映像和SDK。此初始预览版本仅适用于开发人员,不适用于普通消费者使用,因此我们只能通过手动下载。
D. android 怎样获取webview的缓存
请求的url记录是保存在webviewCache.db,而url的内容是保存在webviewCache文件夹下.
为了便于理解,接下来模拟一个案例,定义一个html文件,在里面显示一张图片,用WebView加载出来,然后再试着从缓存里把这张图片读取出来并显示。
第一步:新建一个Android工程命名为WebViewCache.目录结构如下:
第二步:在assets目录下新建一个html文件,命名为index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>WebViewCacheDemo</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<img src="http://img04.taobaocdn.com/imgextra/i4/608825099/T2nGXBXXpaXXXXXXXX_!!608825099.jpg_310x310.jpg"/>
</body>
</html>
第三步:修改main.xml布局文件,一个WebView控件一个Button(点击加载缓存图片用),代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/webView"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="从缓存读取图片"
android:id="@+id/button"/>
</LinearLayout>
第四步:修改主核心程序WebViewCacheDemo.java,这里我只加载了index.html文件,按钮事件暂时没写,代码如下:
package com.ljq.activity;
import java.io.File;
import java.io.FileInputStream;
import android.app.Activity;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageView;
public class WebViewActivity extends Activity {
private WebView webView;
private static final String url="file:///android_asset/index.html";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView=(WebView)findViewById(R.id.webView);
webView.loadUrl(url);
}
}
第五步:在AndroidMainifest.xml文件中加访问网络的权限:
<uses-permission android:name="android.permission.INTERNET" />
E. 如何读写Android的WebView缓存文件
请求的url记录是保存在webviewCache.db,而url的内容是保存在webviewCache文件夹下.
所以清理的时候只需要把这几个文件夹下的文件删除就行了
//真机测试我用的是魅蓝5.1的系统,/data/data/应用package目录下找不到database文件用下面两句清理webview网页缓存的时候.但是每次执行都报false,
F. 安卓开发 webview为什么自动缓存
webview 会将我们浏览过的网页url已经网页文件(css、图片、js等)保存到数据库表中
可以设置WebView 缓存模式:
建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK
G. android webview加载url怎么缓存
当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹:
我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)。
一、网页缓存
1、缓存构成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db
/data/data/package_name/database/webviewCache.db
综合可以得知 webview 会将我们浏览过的网页url已经网页文件(css、图片、js等)保存到数据库表中
缓存模式(5种)
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
设置WebView缓存模式
privatevoidinitWebView(){
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式
//开启DOMstorageAPI功能
mWebView.getSettings().setDomStorageEnabled(true);
//开启databasestorageAPI功能
mWebView.getSettings().setDatabaseEnabled(true);
StringcacheDirPath=getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;
//StringcacheDirPath=getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;
Log.i(TAG,"cacheDirPath="+cacheDirPath);
//设置数据库缓存路径
mWebView.getSettings().setDatabasePath(cacheDirPath);
//设置ApplicationCaches缓存目录
mWebView.getSettings().setAppCachePath(cacheDirPath);
//开启ApplicationCaches功能
mWebView.getSettings().setAppCacheEnabled(true);
}
清除缓存
/**
*清除WebView缓存
*/
publicvoidclearWebViewCache(){
//清理Webview缓存数据库
try{
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
}catch(Exceptione){
e.printStackTrace();
}
//WebView缓存文件
FileappCacheDir=newFile(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
Log.e(TAG,"appCacheDirpath="+appCacheDir.getAbsolutePath());
FilewebviewCacheDir=newFile(getCacheDir().getAbsolutePath()+"/webviewCache");
Log.e(TAG,"webviewCacheDirpath="+webviewCacheDir.getAbsolutePath());
//删除webview缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
}
//删除webview缓存缓存目录
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
}
H. android开发,用webview打开本地html网页时,怎么清除缓存
/**
* 清除WebView缓存
*/
public void clearWebViewCache() {
/**清理Webview缓存数据库,缓存文件由程序自动生成
* /data/data/package_name/database/webview.db
* /data/data/package_name/database/webviewCache.db
**/
try {
//因为他们都是文件,所以可以用io方式删除,具体方法可以自己写
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}
//WebView 缓存文件
File webviewCacheDir = new File(APP_CACAHE_DIRNAME);
//删除webview 缓存目录
if (webviewCacheDir.exists()) {
//具体的方法自己写
deleteFile(webviewCacheDir);
}
}
I. android中 如何清理webview缓存
一、清除cookie
public static void clearCookies(Context context) {
// Edge case: an illegal state exception is thrown if an instance of
// CookieSyncManager has not be created. CookieSyncManager is normally
// created by a WebKit view, but this might happen if you start the
// app, restore saved state, and click logout before running a UI
// dialog in a WebView -- in which case the app crashes
@SuppressWarnings("unused")
CookieSyncManager cookieSyncMngr =
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
}
这是facebook sdk的源码,我不知道第一句到底起了什么作用?
二、清除webview缓存,查看root过的手机data下的文件,会发现有这个东西:webview命名的东西
删除保存于手机上的缓存.
// clear the cache before time numDays
private int clearCacheFolder(File dir, long numDays) {
int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
try {
for (File child:dir.listFiles()) {
if (child.isDirectory()) {
deletedFiles += clearCacheFolder(child, numDays);
}
if (child.lastModified() < numDays) {
if (child.delete()) {
deletedFiles++;
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
return deletedFiles;
}
打开关闭使用缓存
//优先使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用缓存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
在退出应用的时候加上如下代码
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete();
}
file.delete();
}
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");
发现这个问题,一个朋友在iteye上问的:
Android的CookieManager只提供了removeAllCookies方法,用来删除所有的cookie,有什么办法只删除和特定url关联的cookie呢?本来打算使用setCookie(url, value)将指定url关联的cookie设为空串,但试了一下发现这个方法只是在已有的基础上继续添加cookie,并不能重置已有的cookie。
有朋友给打答案:
/**
* 同步一下cookie
*/
public static void synCookies(Context context, String url) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();//移除
cookieManager.setCookie(url, cookies);//指定要修改的cookies
CookieSyncManager.getInstance().sync();
}