|
@@ -17,7 +17,8 @@ import java.io.IOException;
|
|
* email : yangchong211@163.com
|
|
* email : yangchong211@163.com
|
|
* time : 2020/8/6
|
|
* time : 2020/8/6
|
|
* desc : 音视频播放记录本地缓存
|
|
* desc : 音视频播放记录本地缓存
|
|
- * revise:
|
|
|
|
|
|
+ * revise: 最开始使用greenDao,二级缓存耗时100毫秒左右
|
|
|
|
+ * 磁盘+内存+key缓存+读写优化,耗时大概2到5毫秒左右
|
|
* </pre>
|
|
* </pre>
|
|
*/
|
|
*/
|
|
public class LocationManager {
|
|
public class LocationManager {
|
|
@@ -44,26 +45,38 @@ public class LocationManager {
|
|
* 磁盘缓存
|
|
* 磁盘缓存
|
|
*/
|
|
*/
|
|
private SqlLiteCache sqlLiteCache;
|
|
private SqlLiteCache sqlLiteCache;
|
|
|
|
+ /**
|
|
|
|
+ * 配置类
|
|
|
|
+ */
|
|
private CacheConfig cacheConfig;
|
|
private CacheConfig cacheConfig;
|
|
|
|
|
|
-
|
|
|
|
private static class ManagerHolder {
|
|
private static class ManagerHolder {
|
|
- private static final LocationManager INSTANCE = new LocationManager();
|
|
|
|
|
|
+ private static final com.yc.videosqllite.manager.LocationManager INSTANCE = new com.yc.videosqllite.manager.LocationManager();
|
|
}
|
|
}
|
|
|
|
|
|
- public static LocationManager getInstance() {
|
|
|
|
|
|
+ public static com.yc.videosqllite.manager.LocationManager getInstance() {
|
|
return ManagerHolder.INSTANCE;
|
|
return ManagerHolder.INSTANCE;
|
|
}
|
|
}
|
|
|
|
|
|
public void init(CacheConfig cacheConfig){
|
|
public void init(CacheConfig cacheConfig){
|
|
this.cacheConfig = cacheConfig;
|
|
this.cacheConfig = cacheConfig;
|
|
- videoMapCache = new VideoMapCache(cacheConfig);
|
|
|
|
- sqlLiteCache = new SqlLiteCache(cacheConfig);
|
|
|
|
CacheLogUtils.setIsLog(cacheConfig.isLog());
|
|
CacheLogUtils.setIsLog(cacheConfig.isLog());
|
|
|
|
+ videoMapCache = new VideoMapCache();
|
|
|
|
+ sqlLiteCache = new SqlLiteCache();
|
|
|
|
+ CacheLogUtils.d("LocationManager-----init初始化-");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public CacheConfig getCacheConfig() {
|
|
|
|
+ if (cacheConfig==null){
|
|
|
|
+ throw new RuntimeException("请先调用init方法进行初始化");
|
|
|
|
+ }
|
|
|
|
+ return cacheConfig;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 存数据
|
|
* 存数据
|
|
|
|
+ * url为什么要md5?思考一下……
|
|
|
|
+ *
|
|
* @param url 链接
|
|
* @param url 链接
|
|
* @param location 视频数据
|
|
* @param location 视频数据
|
|
*/
|
|
*/
|
|
@@ -74,6 +87,7 @@ public class LocationManager {
|
|
* 1,表示磁盘缓存
|
|
* 1,表示磁盘缓存
|
|
* 2,表示内存缓存+磁盘缓存
|
|
* 2,表示内存缓存+磁盘缓存
|
|
*/
|
|
*/
|
|
|
|
+ long currentTimeMillis1 = System.currentTimeMillis();
|
|
if (cacheConfig.getType() ==1){
|
|
if (cacheConfig.getType() ==1){
|
|
//存储到磁盘中
|
|
//存储到磁盘中
|
|
sqlLiteCache.put(url,location);
|
|
sqlLiteCache.put(url,location);
|
|
@@ -89,6 +103,8 @@ public class LocationManager {
|
|
//存储到内存中
|
|
//存储到内存中
|
|
videoMapCache.put(url,location);
|
|
videoMapCache.put(url,location);
|
|
}
|
|
}
|
|
|
|
+ long currentTimeMillis2 = System.currentTimeMillis();
|
|
|
|
+ CacheLogUtils.d("LocationManager-----put--存数据耗时-"+(currentTimeMillis2-currentTimeMillis1));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -103,6 +119,7 @@ public class LocationManager {
|
|
* 1,表示磁盘缓存
|
|
* 1,表示磁盘缓存
|
|
* 2,表示内存缓存+磁盘缓存
|
|
* 2,表示内存缓存+磁盘缓存
|
|
*/
|
|
*/
|
|
|
|
+ long currentTimeMillis1 = System.currentTimeMillis();
|
|
long position;
|
|
long position;
|
|
if (cacheConfig.getType() ==1){
|
|
if (cacheConfig.getType() ==1){
|
|
//从磁盘中查找
|
|
//从磁盘中查找
|
|
@@ -121,6 +138,9 @@ public class LocationManager {
|
|
//先从内存中找
|
|
//先从内存中找
|
|
position = videoMapCache.get(url);
|
|
position = videoMapCache.get(url);
|
|
}
|
|
}
|
|
|
|
+ long currentTimeMillis2 = System.currentTimeMillis();
|
|
|
|
+ CacheLogUtils.d("LocationManager-----get--取数据耗时-"+(currentTimeMillis2-currentTimeMillis1)
|
|
|
|
+ + "---进度-"+position);
|
|
return position;
|
|
return position;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -182,7 +202,7 @@ public class LocationManager {
|
|
* 清楚所有数据
|
|
* 清楚所有数据
|
|
* @return 是否清楚完毕
|
|
* @return 是否清楚完毕
|
|
*/
|
|
*/
|
|
- public synchronized boolean clearAll(){
|
|
|
|
|
|
+ public synchronized void clearAll(){
|
|
/*
|
|
/*
|
|
* type
|
|
* type
|
|
* 0,表示内存缓存
|
|
* 0,表示内存缓存
|
|
@@ -190,15 +210,14 @@ public class LocationManager {
|
|
* 2,表示内存缓存+磁盘缓存
|
|
* 2,表示内存缓存+磁盘缓存
|
|
*/
|
|
*/
|
|
if (cacheConfig.getType() ==1){
|
|
if (cacheConfig.getType() ==1){
|
|
- return sqlLiteCache.clearAll();
|
|
|
|
|
|
+ sqlLiteCache.clearAll();
|
|
} else if (cacheConfig.getType() ==2){
|
|
} else if (cacheConfig.getType() ==2){
|
|
- boolean clearAll = videoMapCache.clearAll();
|
|
|
|
- boolean all = sqlLiteCache.clearAll();
|
|
|
|
- return clearAll && all;
|
|
|
|
|
|
+ videoMapCache.clearAll();
|
|
|
|
+ sqlLiteCache.clearAll();
|
|
} else if (cacheConfig.getType()==0){
|
|
} else if (cacheConfig.getType()==0){
|
|
- return videoMapCache.clearAll();
|
|
|
|
|
|
+ videoMapCache.clearAll();
|
|
} else {
|
|
} else {
|
|
- return videoMapCache.clearAll();
|
|
|
|
|
|
+ videoMapCache.clearAll();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -209,8 +228,10 @@ public class LocationManager {
|
|
public long getUseMemory(){
|
|
public long getUseMemory(){
|
|
long totalMemory = Runtime.getRuntime().totalMemory();
|
|
long totalMemory = Runtime.getRuntime().totalMemory();
|
|
long freeMemory = Runtime.getRuntime().freeMemory();
|
|
long freeMemory = Runtime.getRuntime().freeMemory();
|
|
|
|
+ CacheLogUtils.d("LocationManager-----内存-"+totalMemory+"-----"+freeMemory);
|
|
//long maxMemory = Runtime.getRuntime().maxMemory();
|
|
//long maxMemory = Runtime.getRuntime().maxMemory();
|
|
long useMemory = totalMemory - freeMemory;
|
|
long useMemory = totalMemory - freeMemory;
|
|
|
|
+ CacheLogUtils.d("LocationManager-----获取当前应用使用的内存-"+useMemory);
|
|
return useMemory;
|
|
return useMemory;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -225,6 +246,7 @@ public class LocationManager {
|
|
}
|
|
}
|
|
long totalMemory = Runtime.getRuntime().totalMemory();
|
|
long totalMemory = Runtime.getRuntime().totalMemory();
|
|
long threshold = totalMemory / proportion;
|
|
long threshold = totalMemory / proportion;
|
|
|
|
+ CacheLogUtils.d("LocationManager-----设定内存的阈值-"+threshold);
|
|
return threshold;
|
|
return threshold;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -234,6 +256,7 @@ public class LocationManager {
|
|
*/
|
|
*/
|
|
public void dumpHprofData(Context context){
|
|
public void dumpHprofData(Context context){
|
|
String dump = DiskFileUtils.getPath(context, "dump");
|
|
String dump = DiskFileUtils.getPath(context, "dump");
|
|
|
|
+ CacheLogUtils.d("LocationManager-----获取Java内存快照文件-"+dump);
|
|
try {
|
|
try {
|
|
Debug.dumpHprofData(dump);
|
|
Debug.dumpHprofData(dump);
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|