編輯:關於android開發
DiskLruCache是谷歌推薦的用來實現硬盤緩存的類,本案例將對DiskLruCache的基本用法做一個總結,包括:創建緩存、查找使用緩存、移除緩存等等。
DiskLruCache使用open方法創建一個實例,如下所示:對應的四個參數分別為:緩存目錄、應用版本號、單個key對應的數據的個數(一般設為1)、緩存的總大小,其中key是圖片的url經過MD5轉碼獲得的,防止url帶有特殊符號影響緩存的正常使用。
try {
File cacheDir = getDiskCacheDir(this, "bitmap");
if (!cacheDir.exists()) {
cacheDir.mkdirs();
}
mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(this), 1, 10 * 1024 * 1024);
} catch (Exception e) {
e.printStackTrace();
}
通過DiskLruCache.Editor可以獲取到緩存對象的編輯對象editor,類似於SharedPreference的editor。DiskLruCache不允許同時編輯一個緩存對象,如果這個緩存對象正在被編輯,則editor==null。
new Thread(new Runnable() {
@Override
public void run() {
try {
String key = hashKeyForDisk(imageUrl);
DiskLruCache.Editor editor = null;
editor = mDiskLruCache.edit(key);
if (editor != null) {
OutputStream outputStream = editor.newOutputStream(0);
if (downloadUrlToStream(imageUrl, outputStream)) {
editor.commit();
} else {
editor.abort();
}
}
//不該頻繁的flush,防止journal日志文件的頻繁修改
mDiskLruCache.flush();
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("saveCache done,the bitmap is ready");
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
DiskLruCache.get(String key)方法可以獲取到一個Snapshot實例,通過DiskLruCache.Snapshot實例獲取緩存文件的輸入流,即可在imageView上顯示該圖片。
//讀取緩存
try {
DiskLruCache.Snapshot snapshot = mDiskLruCache.get(hashKeyForDisk(imageUrl));
if (snapshot != null) {
InputStream is = snapshot.getInputStream(0);
Bitmap bitmap = BitmapFactory.decodeStream(is);
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageBitmap(null);
}
} catch (IOException e) {
e.printStackTrace();
}
另外,DiskLruCache還提供了清空緩存delete()、獲取緩存目錄下的緩存大小size()等方法操作緩存。
獲取data下目錄文件和查看android數據庫文件,dataandroid首先要是在真機上查看android數據庫文件必須要取得root權限,這裡怎麼獲取就不在多說。可
android6.0源碼分析之Camera API2.0下的Capture流程分析,android6.0api2.0前面對Camera2的初始化以及預覽的相關流程進行了詳
android源代碼在線搜索 在沒有google的時代,當在開發中遇到問題時,程序員唯一的方式就是去讀源代碼,雖然現在可以通過搜索引擎解決大部分開發問題,但是要想理解其內
安卓開源項目周報0208,安卓開源項目0208 由OpenDigg 出品的安卓開源項目周報第七期來啦。我們的安卓開源周報集合了OpenDigg一周來