From a903180491bccb5d6a5ea76cc91f6b4f05f95381 Mon Sep 17 00:00:00 2001 From: AriaLyy <511455842@qq.com> Date: Sat, 30 Dec 2017 11:54:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8A3.3.9=E4=BE=9D?= =?UTF-8?q?=E7=84=B6=E5=AD=98=E5=9C=A8=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=AE=B0=E5=BD=95=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20https://github.com/AriaLyy/Aria/issues/181?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/arialyy/aria/core/inf/AbsTarget.java | 2 ++ .../arialyy/aria/core/manager/TEManager.java | 23 +++++++++---------- .../java/com/arialyy/aria/orm/DBConfig.java | 2 +- .../java/com/arialyy/aria/orm/SqlHelper.java | 10 +++++++- .../java/com/arialyy/aria/orm/SqlUtil.java | 23 ++++++++++++++++--- .../simple/download/SingleTaskActivity.java | 3 ++- 6 files changed, 45 insertions(+), 18 deletions(-) diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java index ab174537..76e66441 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java @@ -24,6 +24,7 @@ import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.download.DownloadGroupTaskEntity; import com.arialyy.aria.core.download.DownloadTaskEntity; +import com.arialyy.aria.core.manager.TEManager; import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; @@ -50,6 +51,7 @@ public abstract class AbsTarget map = new ConcurrentHashMap<>(); + private LruCache cache = new LruCache<>(1024); private Lock lock; public static TEManager getInstance() { @@ -61,7 +60,7 @@ public class TEManager { final Lock lock = this.lock; lock.lock(); try { - AbsTaskEntity tEntity = map.get(convertKey(key)); + AbsTaskEntity tEntity = cache.get(convertKey(key)); if (tEntity == null || tEntity.getClass() != clazz) { ITEntityFactory factory = chooseFactory(clazz); if (factory == null) { @@ -69,7 +68,7 @@ public class TEManager { return null; } tEntity = factory.create(key); - map.put(convertKey(key), tEntity); + cache.put(convertKey(key), tEntity); } return (TE) tEntity; } finally { @@ -87,7 +86,7 @@ public class TEManager { lock.lock(); try { String groupName = CommonUtil.getMd5Code(urls); - AbsTaskEntity tEntity = map.get(convertKey(groupName)); + AbsTaskEntity tEntity = cache.get(convertKey(groupName)); if (tEntity == null || tEntity.getClass() != clazz) { IGTEntityFactory factory = chooseGroupFactory(clazz); if (factory == null) { @@ -95,7 +94,7 @@ public class TEManager { return null; } tEntity = factory.create(groupName, urls); - map.put(convertKey(groupName), tEntity); + cache.put(convertKey(groupName), tEntity); } return (TE) tEntity; } finally { @@ -112,7 +111,7 @@ public class TEManager { final Lock lock = this.lock; lock.lock(); try { - AbsTaskEntity tEntity = map.get(convertKey(absEntity.getKey())); + AbsTaskEntity tEntity = cache.get(convertKey(absEntity.getKey())); if (tEntity == null || tEntity.getClass() != clazz) { ITEntityFactory factory = chooseFactory(clazz); if (factory == null) { @@ -120,7 +119,7 @@ public class TEManager { return null; } tEntity = factory.create(absEntity); - map.put(convertKey(absEntity.getKey()), tEntity); + cache.put(convertKey(absEntity.getKey()), tEntity); } return (TE) tEntity; } finally { @@ -153,7 +152,7 @@ public class TEManager { final Lock lock = this.lock; lock.lock(); try { - AbsTaskEntity tEntity = map.get(convertKey(key)); + AbsTaskEntity tEntity = cache.get(convertKey(key)); if (tEntity == null) { return null; } else { @@ -177,7 +176,7 @@ public class TEManager { final Lock lock = this.lock; lock.lock(); try { - return map.put(convertKey(te.key), te) != null; + return cache.put(convertKey(te.key), te) != null; } finally { lock.unlock(); } @@ -190,7 +189,7 @@ public class TEManager { final Lock lock = this.lock; lock.lock(); try { - return map.remove(convertKey(key)); + return cache.remove(convertKey(key)); } finally { lock.unlock(); } diff --git a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java index d691dec1..5f7870a6 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java @@ -34,7 +34,7 @@ import java.util.Map; class DBConfig { static Map mapping = new HashMap<>(); static String DB_NAME; - static int VERSION = 20; + static int VERSION = 21; static { if (TextUtils.isEmpty(DB_NAME)) { diff --git a/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java b/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java index bc4671c3..53cf61ef 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java @@ -21,6 +21,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.support.annotation.NonNull; +import android.support.v4.util.LruCache; import android.text.TextUtils; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.util.ALog; @@ -49,6 +50,7 @@ final class SqlHelper extends SQLiteOpenHelper { private static final int DEL_DATA = 6; private static volatile SqlHelper INSTANCE = null; + private static LruCache mDataCache = new LruCache<>(1024); static SqlHelper init(Context context) { if (INSTANCE == null) { @@ -328,6 +330,7 @@ final class SqlHelper extends SQLiteOpenHelper { db = checkDb(db); Class clazz = dbEntity.getClass(); List fields = CommonUtil.getAllFields(clazz); + DbEntity cacheEntity = mDataCache.get(dbEntity.hashCode()); if (fields != null && fields.size() > 0) { StringBuilder sb = new StringBuilder(); sb.append("UPDATE ").append(CommonUtil.getClassName(dbEntity)).append(" SET "); @@ -337,8 +340,12 @@ final class SqlHelper extends SQLiteOpenHelper { if (SqlUtil.ignoreField(field)) { continue; } - sb.append(i > 0 ? ", " : ""); try { + if (cacheEntity != null && field.get(dbEntity) == field.get(cacheEntity)) { + continue; + } + + sb.append(i > 0 ? ", " : ""); String value; sb.append(field.getName()).append("='"); Type type = field.getType(); @@ -656,6 +663,7 @@ final class SqlHelper extends SQLiteOpenHelper { } } entity.rowID = cursor.getInt(cursor.getColumnIndex("rowid")); + mDataCache.put(entity.hashCode(), entity); entitys.add(entity); } closeCursor(cursor); diff --git a/Aria/src/main/java/com/arialyy/aria/orm/SqlUtil.java b/Aria/src/main/java/com/arialyy/aria/orm/SqlUtil.java index dd736b81..877f10dd 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/SqlUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/SqlUtil.java @@ -110,10 +110,19 @@ final class SqlUtil { if (TextUtils.isEmpty(str)) { return map; } + boolean isDecode = false; + if (str.endsWith("_&_decode_&_")) { + isDecode = true; + str = str.substring(0, str.length() - 12); + } String[] element = str.split(","); for (String data : element) { String[] s = data.split("\\$"); - map.put(s[0], s[1]); + if (isDecode) { + map.put(CommonUtil.decryptBASE64(s[0]), CommonUtil.decryptBASE64(s[1])); + } else { + map.put(s[0], s[1]); + } } return map; } @@ -128,10 +137,18 @@ final class SqlUtil { StringBuilder sb = new StringBuilder(); Set keys = map.keySet(); for (String key : keys) { - sb.append(key).append("$").append(map.get(key)).append(","); + sb.append(CommonUtil.encryptBASE64(key)) + .append("$") + .append(CommonUtil.encryptBASE64(map.get(key))) + .append(","); } String str = sb.toString(); - return TextUtils.isEmpty(str) ? str : str.substring(0, str.length() - 1); + str = TextUtils.isEmpty(str) ? str : str.substring(0, str.length() - 1); + //3.3.10版本之前没有decode,需要加标志 + if (map.size() != 0) { + str += "_&_decode_&_"; + } + return str; } /** diff --git a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java index fd14a025..d89f85fa 100644 --- a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java @@ -209,7 +209,8 @@ public class SingleTaskActivity extends BaseActivity { //Aria.download(this).load(DOWNLOAD_URL).removeRecord(); break; case R.id.cancel: - Aria.download(this).load(DOWNLOAD_URL).cancel(); + //Aria.download(this).load(DOWNLOAD_URL).cancel(); + Aria.download(this).load(DOWNLOAD_URL).removeRecord(); break; } }