1. 程式人生 > >APP的快取檔案到底應該存在哪?

APP的快取檔案到底應該存在哪?

只要是需要進行聯網獲取資料的APP,那麼不管是版本更新,還是圖片快取,都會在本地產生快取檔案。那麼,這些快取檔案到底放在什地方合適呢?系統有沒有給我們提供建議的快取位置呢?不同的快取位置有什麼不同呢?今天這篇文章就是主要來說明這個問題的。

首先,我們要知道,在Android手機裡面,快取的位置分為兩類,一類是Internal Storage,即內部儲存,另外一類是External Storage,即外部儲存。比較老的手機,有一個手機內部儲存,還有一個SD卡儲存,就是分別對應這兩種儲存位置,因為以前的SD卡是可以擴充套件的,即可拆卸的,所以可以用是否可拆卸作為內外儲存的分類標準。但是現在最新的裝置,比如小米、錘子、華為等,都取消了可拆卸的SD卡,直接與機身焊接在一起,分為16G、32G版本,所以現在內外儲存的分類不再以是否可拆卸作為標準,而是以下面的幾方面作為新的標準:

內部儲存:

總是可用的

這裡的檔案預設是只能被你的app所訪問的。

當用戶解除安裝你的app的時候,系統會把internal裡面的相關檔案都清除乾淨

Internal是在你想確保不被使用者與其他app所訪問的最佳儲存區域。

外部儲存:

並不總是可用的,因為使用者可以選擇把這部分作為USB儲存模式,這樣就不可以訪問了。

是大家都可以訪問的,因此儲存到這裡的檔案是失去訪問控制權限的。

當用戶解除安裝你的app時,系統僅僅會刪除external根目錄(getExternalFilesDir())下的相關檔案。

External是在你不需要嚴格的訪問許可權並且你希望這些檔案能夠被其他app所共享或者是允許使用者通過電腦訪問時的最佳儲存區域。

讀取內部儲存不需要許可權,但是讀取或者是寫入外部儲存需要許可權,在現版本里面,讀許可權不進行宣告,也可以實現讀取,但是在以後版本可能會修改,所以請務必加上,如果應用需要寫入許可權,那麼只宣告寫入許可權即可,不需要再宣告讀取許可權。

下面分別說明如何獲取內外儲存的檔案位置和區別。

一.儲存到內部儲存的方式

1.getFileDir() 通過此方法可以獲取到你的APP內部儲存的檔案,路徑為/data/data/pacgage_name/files

我們直接上程式碼進行測試:

1 2 3 4 5 6 7 8 9 10 File file1 = new File(getFilesDir(), "getFilesDir.txt"); Log.d("TAG""file1=" + file1.getAbsolutePath()); try { OutputStream outputStream1 = new FileOutputStream(file1); outputStream1.write("file".getBytes()); outputStream1.close(); catch (Exception e) { e.printStackTrace(); }

執行結果如下:

1 02-03 07:18:04.068  22237-22237/? D/TAG﹕ file1=/data/data/com.socks.baidudemo/files/getFilesDir.txt

2.getCacheDir() 通過此方法可以獲取到你的APP內部儲存的檔案,路徑為/data/data/package_name/cache

測試程式碼:

1 2 3 4 5 6 7 8 9 File file2 = new File(getCacheDir(), "cache.txt"); Log.d("TAG""file2=" + file2.getAbsolutePath()); try { OutputStream outputStream1 = new FileOutputStream(file2); outputStream1.write("cache".getBytes());

相關推薦

【Android開發經驗】APP快取檔案到底應該存在?看完這篇文章你應該就自己清楚了

只要是需要進行聯網獲取資料的APP,那麼不管是版本更新,還是圖片快取,都會在本地產生快取檔案。那麼,這些快取檔案到底放在什地方合適呢?系統有沒有給我們提供建議的快取位置呢?不同的快取位置有什麼不同呢?今天這篇文章就是主要來說明這個問題的。     首先,我們要知道,在A

APP快取檔案到底應該存在?

只要是需要進行聯網獲取資料的APP,那麼不管是版本更新,還是圖片快取,都會在本地產生快取檔案。那麼,這些快取檔案到底放在什地方合適呢?系統有沒有給我們提供建議的快取位置呢?不同的快取位置有什麼不同呢?今天這篇文章就是主要來說明這個問題的。 首先,我們要知道,在A

iOS獲取App快取檔案的大小並清除快取

App在處理網路資源時,一般都會做離線快取處理,其中最典型離線快取框架為SDWebImage。 但是,離線快取會佔用一定的儲存空間,所以快取清理功能基本成為資訊、購物、閱讀類app的標配功能。 下面用程式碼來分別介紹快取檔案大小的獲取及清除快取

MAC下出現“開啟App顯示檔案已損壞,打不開,您應該將它移到廢紙簍“

開啟App顯示檔案已損壞,打不開,您應該將它移到廢紙簍,怎麼辦? 如果不是mac appstore下的安裝包的話,安裝後會出現如上提示。具體的解決辦法: 在隱私裡面開啟任意來源。**安全性與隱私裡面

android app 快取 ---- android 檔案快取使用流程解析

在度娘那裡搜尋了一下,關於android 快取的資源介紹,發現都是泛泛而談,沒有給出詳細的使用方法。看各路大神的介紹,快取一般分為兩種形式(1.資料庫快取,2.檔案快取)。 資料庫快取,看到這個名字,想必都知道怎麼回事了,將網路請求的資料,一一對應存入本地資料庫中,來達到

咦?Oracle歸檔檔案了?

實驗環境:RHEL 5.4 + Oracle 11.2.0.3 現象:日誌切換後沒找到歸檔日誌目錄。 1.檢視歸檔日誌路徑 2.日誌切換後並未找到歸檔目錄 3.建立歸檔目錄後再次觀察 引申知識 1.檢視歸檔日誌路徑 開啟歸檔模式後,如果不設定歸檔目錄,可以看到預設的歸檔路徑為$ORACLE_HOME/db

為什麽在App設計中,應該慎用左右橫滑設計?

諸多 image 朋友 nvi hone 也會 朋友圈 一個 指示 如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這裏 移動端屏幕越來越大,但用戶對內容量的要求也水漲船高。如何在有限的屏幕內透出更多的內容,是設計師們研究的重點。 常用的內容拓展設計有:Y 方向

App性能優化之內優化

處理器 app https dma subst arraymap lru cache man onmeasure 本文為慕課網《App性能優化之內存優化》課程的學習筆記,視頻地址 (http://www.imooc.com/video/13670) ## 如何查看一個a

Computer Science - CS:APP - 2.1 信息

blog mar 地址 最重要的 模式 log body 小端模式 通用 CS:APP - 2.1 信息存儲 未知: 新知: 字長指明指針數據的標稱大小。字長決定的最重要的系統參數就是虛擬地址空間的最大大小 char類型也能被用來存儲整數值 使用確定大小的整數類型是程序員

四川人應該裏練習洗髓功?

四川洗髓功2016年4月,四川東方易元健康咨詢有限公司誕生於成都,隸屬於鄭州東方易元健康咨詢有限公司。 我們專註於少林易筋洗髓養生體系的傳承與推廣,成都環球中心800平米的標準習練會館;汲取中國傳統中醫國粹精髓,打造中華名醫民間絕技薈萃平臺,運用自身在資本方面的優勢,嫁接最先進的頂層設計模式,將更多中國傳統養

在監視器(Monitor)內部,是如何做線程同步的?程序應該種級別的同步?

style moni bject lock 引用 對象引用 font 程序 monit   在Java虛擬機中,每個對象(object和class)通過某種邏輯關聯監視器,每個監視器和一個對象引用相關聯,為了實現監視器的互斥功能,每個對象都關聯著一把鎖。   一旦方法或者代

使用windows任務計劃程式自動清除C盤快取檔案

背景 由於應用程式會不斷的產生各種臨時檔案和快取檔案,我們的C盤有時候不知不覺就被填滿了,因此,配置一個自動清除快取檔案的指令碼勢在必行了。 功能 自動刪除C盤的快取和臨時檔案 隱藏執行時的CMD視窗 步驟 首先新建一個 clear-cache.bat 檔案,假設它放到 E盤根目

Microsoft Visual Studio除錯技巧(二):Visual Stdio 2010清理除錯生成的快取檔案

使用Visual Stdio 2010程式設計時,會發現硬碟的空閒空間快速不斷減少,這是因為VS2010在除錯時,會生成快取檔案,字尾名iTrace,很佔空間,需要定期手動清理。 IDE中,在“工具→選項→IntelliTrace→高階→IntelliTrace記錄的位置”可以配置儲存i

【Java筆記】String字串拼接應該使用種方式?

我們所知道的字串String的拼接有: “+” 、 concat () 方式實現,或者使用StringBuilder、StringBuffer類實現。這幾種方式效能的從低到高進行排序,則順序為:“+”  <  concat ()  < S

angular1 開啟檔案 並另為(檔案的讀取與寫入)

最近有個需求,在頁面上有個按鈕可以選取檔案然後在匯出到其它地方, 說明白點就是檔案的讀取與寫入,下面是例子(例子中用到了fileSave.js github地址:https://github.com/eligrey/FileSaver.js) 首先引入fileSave.js    i

小程式學習--app.json檔案的介紹

app>json是小程式一個專案很重要的檔案,全域性的配置都在裡面,是不可或缺的,包括了小程式的所有頁面路徑、介面表現、網路超時時間、底部 tab 等. 現在看下我的程式碼  基本上開發小程式會用的模組配置都在裡面,讀者只需要複製之後,進行自己想要的修改: 需要注意的是

什麼是域名的TTL值? ——一條域名解析記錄在DNS快取伺服器中的留時間

什麼是域名的TTL值?  轉自:http://hizip.net/index.php/archives/20/ TTL(Time-To-Live),就是一條域名解析記錄在DNS伺服器中的存留時間。當各地的DNS伺服器接受到解析請求時,就會向域名指定的NS伺服器(權威域名伺服器)發出解析

小程式app.json檔案

全域性配置 小程式根目錄下的 app.json 檔案用來對微信小程式進行全域性配置,決定頁面檔案的路徑、視窗表現、設定網路超時時間、設定多 tab 等。 配置示例 以下是一個包含了部分常用配置選項的 app.json : { "page

清除APP快取工具類

這是專案中用到的“ 清除快取”功能的工具類 import android.content.Context; import android.os.Environment; import android.text.TextUtils; import java.io.File; imp

安卓-APP應用檔案路徑

應用檔案API 檔案目錄API層 應用檔案API 內部存貯API // 內部私有快取路徑,/data/user/0/com.exam.pkg/cache (6.0之後路徑) context.getCacheDir().get