发表于 2019-5-11 02:03

申请会员ID:abcdyfj522

1、abcdyfj522
2、个人邮箱:1009395239@qq.com
3、原创技术文章:安卓开发文件缓存方法的具体实现(参考代码)



安卓开发中使用缓存,基本介绍请参见: 《安卓开发中的缓存管理》

    安卓开发中设置文件缓存的方法,参考代码如下:

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

Hmily 发表于 2019-5-12 22:23

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:abcdyfj522