1.整体分析

1.1.源代码,可以直接Copy。

public class Config {
private static int M = 1024 * 1024;
private volatile static Config mConfig;
private static LruCache<String, Object> mLruCache = new LruCache<>(1 * M); public Config(Context context){} public static Config init(Context context) {
if (null == mConfig) {
synchronized (Config.class) {
if (null == mConfig) {
mConfig = new Config(context);
}
}
}
return mConfig;
} public static Config getSingleInstance() {
return mConfig;
} //--- 基础 ----------------------------------------------------------------------------------- public <T extends Serializable> void saveData(@NonNull String key, @NonNull T value) {
mLruCache.put(key, value);
} public <T extends Serializable> T getData(@NonNull String key, @Nullable T defaultValue) {
T result = (T) mLruCache.get(key);
if (result != null) {
return result;
}
return defaultValue;
}
//--下面要看情况了,写一些要记录的信息
//--方式如:private static Key_something="something";
//--类型看情况,这里用string了。参数也看清况,这里用一个Integer吧
//---------- publlic String saveSomething(Integer position){
// savaData(something,position);
// }
//--然后是获取了,看情况传不传参,getData第二个参数是默认的,看情况
//-----------public Integer getSomething(){
// return getData(Key_something,0)
// } }

1.2.Config类的作用

  就是一个记录用户信息的一个类。

  比如某一页,用户看到了第几页第几个位置,可以通过这个方式存放到一个系统缓存中。

  比如是否是第一次打开APP,都可以用这个方式存放到系统缓存中

  而且这个类可以随意修改,看自己需要记录什么,只要按照例子写即可。

  这是一个泛型,所以什么数据都支持。

2.局部分析

2.1.看一下定义了哪些成员变量

  

  这里定义了一个M,数据量的大小,因为一般都是用M。1M=1024KB=1024*1024B

  这里用了一个关键字volatile

  

  然后LurCache是一个系统缓存类,相当于一个Map。

2.2.一个空的构造函数

  

  这个可以为空,也可以和一些第三方提供的缓存类挂钩。

2.3.初始化函数

  

  这里保证Config每次只能有一个实例,同时只能有一个线程执行,实现同步。

2.4.返回一个单例

  

  返回一个单例,保证了唯一性。

2.5.保存数据和获取数据,泛型实现。

  

  T 继承 Serializable,实现序列化,关于序列化可以参考这篇文章。

  序列化的作用如下

  

  什么情况下需要序列化?

  

最新文章

  1. VS2010中dll不可用问题
  2. JSPatch常见问题解答
  3. centos/redhat安装mysql
  4. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
  5. DDMS中File Explorer无法查看data/data文件解决办法
  6. python书籍推荐
  7. Jenkins实现PHP的自动部署
  8. Ubuntu 16.04.3 LTS u盘-安裝教程(填坑)
  9. 使用lombok自动生成链式调用
  10. 你不知道的CSS单位
  11. ES6中的解构赋值
  12. redis的LRU算法(二)
  13. 第25月第18天 vue
  14. python3 互译无线短信接口
  15. (转)eclipse上传项目到码云
  16. 如何让FireFox/chrome新打开的标签页在后台打开,而不是立即跳转过去
  17. Nginx反向代理下IIS获取真实IP
  18. 使用 scm-manager 搭建 git/svn 代码管理仓库(二)
  19. 支付宝 iphone6 指纹验证失败
  20. python实现的、带GUI界面电影票房数据可视化程序

热门文章

  1. ComponentOne、Spread、ActiveReports 5折起 加入惊喜惠
  2. Shader笔记
  3. SharePoint 和 Windows Phone 7 开发人员培训资源
  4. Linux CentOS下部署Java Web项目
  5. 动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案
  6. LeetCode Path Sum 判断树的路径之和
  7. 笨办法学Python(十一)
  8. iis 7 操作 .net
  9. 快餐店之间插入仓库,路最短,DP,POJ(1485)
  10. Python -函数的参数定义