導航:首頁 > 操作系統 > android圖片緩存demo

android圖片緩存demo

發布時間:2022-09-13 17:24:53

android文件緩存的方法具體怎麼實現

安卓開發中設置文件緩存的方法,參考代碼如下:
1 public class ConfigCache {
2 private static final String TAG = ConfigCache.class.getName();
3
4 public static final int CONFIG_CACHE_MOBILE_TIMEOUT = 3600000; //1 hour
5 public static final int CONFIG_CACHE_WIFI_TIMEOUT = 300000; //5 minute
6
7 public static String getUrlCache(String url) {
8 if (url == null) {
9 return null;
10 }
11
12 String result = null;
13 File file = new File(AppApplication.mSdcardDataDir + "/" + getCacheDecodeString(url));
14 if (file.exists() && file.isFile()) {
15 long expiredTime = System.currentTimeMillis() - file.lastModified();
16 Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime/60000 + "min");
17 //1. in case the system time is incorrect (the time is turn back long ago)
18 //2. when the network is invalid, you can only read the cache
19 if (AppApplication.mNetWorkState != NetworkUtils.NETWORN_NONE && expiredTime < 0) {
20 return null;
21 }
22 if(AppApplication.mNetWorkState == NetworkUtils.NETWORN_WIFI
23 && expiredTime > CONFIG_CACHE_WIFI_TIMEOUT) {
24 return null;
25 } else if (AppApplication.mNetWorkState == NetworkUtils.NETWORN_MOBILE
26 && expiredTime > CONFIG_CACHE_MOBILE_TIMEOUT) {
27 return null;
28 }
29 try {
30 result = FileUtils.readTextFile(file);
31 } catch (IOException e) {
32 e.printStackTrace();
33 }
34 }
35 return result;
36 }
37
38 public static void setUrlCache(String data, String url) {
39 File file = new File(AppApplication.mSdcardDataDir + "/" + getCacheDecodeString(url));
40 try {
41 //創建緩存數據到磁碟,就是創建文件
42 FileUtils.writeTextFile(file, data);
43 } catch (IOException e) {
44 Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!");
45 e.printStackTrace();
46 }
47 }
48
49 public static String getCacheDecodeString(String url) {
50 //1. 處理特殊字元
51 //2. 去除後綴名帶來的文件瀏覽器的視圖凌亂(特別是圖片更需要如此類似處理,否則有的手機打開圖庫,全是我們的緩存圖片)
52 if (url != null) {
53 return url.replaceAll("[.:/,%?&=]", "+").replaceAll("[+]+", "+");
54 }
55 return null;
56 }
57 }
58
59
上面的方法如何調用,參考代碼如下:
1 void getConfig(){
2 //首先嘗試讀取緩存
3 String cacheConfigString = ConfigCache.getUrlCache(CONFIG_URL);
4 //根據結果判定是讀取緩存,還是重新讀取
5 if (cacheConfigString != null) {
6 showConfig(cacheConfigString);
7 } else {
8 //如果緩存結果是空,說明需要重新載入
9 //緩存為空的原因可能是1.無緩存;2. 緩存過期;3.讀取緩存出錯
10 AsyncHttpClient client = new AsyncHttpClient();
11 client.get(CONFIG_URL, new AsyncHttpResponseHandler(){
12 @Override
13 public void onSuccess(String result){
14 //成功下載,則保存到本地作為後面緩存文件
15 ConfigCache.setUrlCache(result, CONFIG_URL);
16 //後面可以是UI更新,僅供參考
17 showConfig(result);
18 }
19 @Override
20 public void onFailure(Throwable arg0) {
21 //根據失敗原因,考慮是顯示載入失敗,還是再讀取緩存
22 }
23 });
24 }
25 }
26
27

⑵ android本地緩存圖片最大取多大的空間較為

相冊圖片預取緩存策略是內存緩存(硬引用LruCache、軟引用SoftReference<Bitmap>)、外部文件緩存(context.getCachedDir()),緩存中取不到的情況下再向服務端請求下載圖片。同時緩存三張圖片(當前預覽的這張,前一張以及後一張)。1.內存緩存//需要導入外部jar文件 android-support-v4.jar
import android.support.v4.util.LruCache;
//開辟8M硬緩存空間
private final int hardCachedSize = 8*1024*1024;
//hard cache
private final LruCache<String, Bitmap> sHardBitmapCache = new LruCache<String, Bitmap>(hardCachedSize){
@Override
public int sizeOf(String key, Bitmap value){
return value.getRowBytes() * value.getHeight();
}
@Override
protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue){
Log.v("tag", "hard cache is full , push to soft cache");
//硬引用緩存區滿,將一個最不經常使用的oldvalue推入到軟引用緩存區
sSoftBitmapCahe.put(key, new SoftReference<Bitmap>(oldValue));
}
}

詳細

⑶ android中什麼是緩存技術,描述一下,例如緩存圖片,文字等

跟電腦的緩存一個道理,是臨時交換區,提高運行速度用的,比如你打開一張圖片,第一次打開要2秒,打開第二張圖片要2秒,當你回頭再打開第一張的時候就只需1秒,這就是緩存起的作用,,把圖片信息緩存到臨時區以提高運行速度

⑷ 如何讀寫Android的WebView緩存文件

簡單步驟解答:

  1. 新建一個Android工程命名為WebViewCache。

  2. 在assets目錄下新建一個html文件,命名為index.html。

  3. 修改主核心程序WebViewCacheDemo.java,這里我只載入了index.html文件。

  4. 在AndroidMainifest.xml文件中加訪問網路的許可權。

請求的url記錄是保存在webviewCache.db,而url的內容是保存在webviewCache文件夾下。

⑸ android 如何清理掉相冊(圖片查看器)緩存

設置 -程序管理-相冊-清理緩存

⑹ Android進行圖片緩存,用哪個方法好點

搜搜fresco,三級緩沖 、facebook使用的緩沖策略、應該是目前最好的

⑺ Android緩存圖片,系統圖庫卻看不見。怎麼做到的。

有些特定軟體會在緩存圖片文件夾自動生成名為「.nomedia」的文件,屏蔽了其他軟體的掃描。代表此文件夾裡面的MP3、MP4、RMVB、JPEG等圖片音頻視頻等媒體文件,所以系統圖庫看不到。但一些特殊軟體如 快圖、MX Player也可以在設置中取消辨認這些文件!

⑻ android圖片緩存技術怎麼保證不下載重復的圖片

沒看明白,手機系統本身是不會下載任何東西的,只是會偷偷戚後台聯網。如果塡的是播放器下載歌曲封面的話,第一次會自動下載,第二次不會。大多數播放器都有自動手動選項。如果你指瀏覽器,那麼,所謂的緩存只能緩存一到十個頁面,但是在關閉瀏覽器後,又重新打開頁面,也是需要流量的,uc瀏覽器有自動載入未正常關閉啟動時自動載入的功能,但經常失靈,有時需要流量,有時不需要。至於你間的怎麼保證不下載重復的圖片,回答是無法保證

⑼ 跪求一個 android 視頻緩存完整demo(帶進度條)

在做手機開發時,經常碰到一些比較耗時的操作,這個時候進度條就開始派上用場了。 這個demo展示了ProgressBar進度條和ProgressDialog進度框。 一、ProgressDialog進度框,效果如圖所示: 代碼如下: 復制代碼 代碼如下: //進度對話框按鈕監聽 class ProssButtonListener implements OnClickListener { @Override public void onClick(View v) { myDialog = ProgressDialog.show(ProgressbarDemo.this, "進度條標題", "進度條內容", true); new Thread() { public void run() { try { /* 在這里寫上要背景運行的程序片段 */ /* 為了明顯看見效果,以暫停3秒作為示範 */ sleep(3000); } catch (Exception e) { e.printStackTrace(); } finally { // 卸載所創建的myDialog對象。 myDialog.dismiss(); } } }.start(); /* 開始運行運行線程 */ } } 二、進度條對話框,這里用兩種情況來動態顯示進度條刻度 1、handle方法 效果圖如下: 代碼如下: 復制代碼 代碼如下: //進度條handle按鈕監聽 class ProssBarHandleButtonListener implements OnClickListener { @Override public void onClick(View v) { progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(1000); new Thread() { public void run() { for(int i=0;i<=1000;){ try { /* 在這里寫上運行的進度條 */ Message msg = new Message(); msg.what = 1; msg.getData().putInt("size", i); handler.sendMessage(msg);//handle發送消息 /* 為了明顯看見效果,以暫停1秒作為示範 */ sleep(100); i+=10; } catch (Exception e) { handler.obtainMessage(-1).sendToTarget(); e.printStackTrace(); } } } }.start(); /* 開始運行運行線程 */ } } //handle接收消息 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: progressBarHandle.setProgress(msg.getData().getInt("size")); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress()); myProssBarhandleText.setText(result+ "%"); if(progressBarHandle.getProgress()==progressBarHandle.getMax()){ Toast.makeText(ProgressbarDemo.this, "下載成功", 1).show(); progressBarHandle.setVisibility(View.GONE); myProssBarhandleText.setVisibility(View.GONE); } break; case -1: Toast.makeText(ProgressbarDemo.this,"下載失敗", 1).show(); break; } } }; 2、使用AsyncTask方法,效果圖與handle效果一樣 具體代碼如下: 復制代碼 代碼如下: //進度條synctask按鈕監聽 class ProssBarSyncButtonListener implements OnClickListener { @Override public void onClick(View v) { new AsyncLoader().execute((Void)null); } } //AsyncTask 任務執行 class AsyncLoader extends AsyncTask<Void, Integer, Integer> { @Override // 在doInBackground方法執行前執行 protected void onPreExecute(){ progressBarHandle.setVisibility(View.VISIBLE); myProssBarhandleText.setVisibility(View.VISIBLE); progressBarHandle.setMax(100000); } // 做具體的耗時操作 protected Integer doInBackground(Void... params) { //這里以1萬的進度條刻度來顯示 int totalSize = 100000; for (int i = 0; i < 100000; ) { publishProgress(i); //通過推送消息傳遞數據給onProgressUpdate方法執行 i+=10; } return totalSize; } // 在doInBackground方法執行過程中執行 protected void onProgressUpdate(Integer... progress) { progressBarHandle.setProgress(progress[0]); float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax(); int result = (int)(num*100); myProssBarhandleText.setText(result+ "%"); } // 在doInBackground方法結束後執行 protected void onPostExecute(Integer result) { Toast.makeText(ProgressbarDemo.this, "下載成功,下載了"+result, 1).show(); myProssBarhandleText.setVisibility(View.GONE); progressBarHandle.setVisibility(View.GONE); } } 點擊下載DEMO示例

閱讀全文

與android圖片緩存demo相關的資料

熱點內容
crf源碼解析 瀏覽:851
伺服器軟體開發是什麼意思 瀏覽:939
刪除彩信android 瀏覽:862
元宵節猜燈謎h5源碼 瀏覽:69
樂培生app怎麼綁定 瀏覽:762
視頻壓縮不清楚怎麼說 瀏覽:525
加好友伺服器繁忙是怎麼回事 瀏覽:381
怎麼解綁app的支付寶賬號 瀏覽:911
ip地址伺服器不可用怎麼解決方法 瀏覽:183
為什麼軟體需要伺服器 瀏覽:63
redis操作命令大全 瀏覽:597
python字元串重復索引 瀏覽:961
為什麼香信新版本連接不上伺服器 瀏覽:50
元旦程序員打羽毛球 瀏覽:614
otc焊接機器人離線編程教學 瀏覽:412
51單片機的ea引腳有何用途 瀏覽:207
centos查看用戶命令 瀏覽:840
程序員臉胖 瀏覽:744
hdfs在主目錄下創建文件夾 瀏覽:800
股票選股器源碼公式如何弄 瀏覽:31