導航:首頁 > 操作系統 > androidwebview離線緩存

androidwebview離線緩存

發布時間:2022-07-19 22:42:51

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();
}

閱讀全文

與androidwebview離線緩存相關的資料

熱點內容
op手機微信加密如何解除 瀏覽:380
如何在王牌戰爭找到高爆率伺服器 瀏覽:7
江浙小學語文輔導課用什麼APP 瀏覽:95
新夢幻大陸伺服器地址 瀏覽:239
網吧伺服器怎麼更換壁紙 瀏覽:528
linux命令方法 瀏覽:330
linux下載freetype 瀏覽:121
程序員入駐平台 瀏覽:327
程序員大戰外掛 瀏覽:743
html實例教程pdf 瀏覽:155
linux命令開放所有許可權 瀏覽:573
30歲能學會編程 瀏覽:735
小火箭的伺服器是什麼 瀏覽:967
cad查信息命令 瀏覽:402
XP禁止新建文件夾 瀏覽:394
程序員的悲慘生活 瀏覽:207
什麼找房app比較好用 瀏覽:202
手機視頻剪輯壓縮 瀏覽:320
中華軟體庫源碼資源共享 瀏覽:69
極雲普惠沒有合適的前端伺服器 瀏覽:173