⑴ 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缓存文件
简单步骤解答:
新建一个Android工程命名为WebViewCache。
在assets目录下新建一个html文件,命名为index.html。
修改主核心程序WebViewCacheDemo.java,这里我只加载了index.html文件。
在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示例