From ad6114a44bf68a46bb5cd269a2eba0b492f9ad67 Mon Sep 17 00:00:00 2001 From: juntao Date: Wed, 29 Sep 2021 17:44:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E7=BC=93=E5=AD=98=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E9=98=9F=E5=88=97=E7=8A=B6=E6=80=81=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E4=B8=8B=E8=BD=BD=E6=8C=89=E9=92=AE=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gh/common/databind/BindingAdapters.java | 4 ++-- .../java/com/gh/common/util/DownloadItemUtils.kt | 4 ++-- .../main/java/com/gh/common/util/GameUtils.java | 4 ++-- .../java/com/gh/download/DownloadManager.java | 15 +++++++++++++-- libraries/LGLibrary | 2 +- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/gh/common/databind/BindingAdapters.java b/app/src/main/java/com/gh/common/databind/BindingAdapters.java index e7eab13ee8..979f4dcc5d 100644 --- a/app/src/main/java/com/gh/common/databind/BindingAdapters.java +++ b/app/src/main/java/com/gh/common/databind/BindingAdapters.java @@ -465,7 +465,7 @@ public class BindingAdapters { case INSTALL_PLUGIN: case INSTALL_NORMAL: if (gameEntity.getApk().size() == 1) { - DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl()); + DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntitySnapshotByUrl(gameEntity.getApk().get(0).getUrl()); if (downloadEntity != null) { PackageInstaller.install(v.getContext(), downloadEntity); } @@ -574,7 +574,7 @@ public class BindingAdapters { // 显示下载过程状态 if (gameEntity.getApk().size() == 1) { - DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntityByUrl(gameEntity.getApk().get(0).getUrl()); + DownloadEntity downloadEntity = DownloadManager.getInstance(progressBar.getContext()).getDownloadEntitySnapshotByUrl(gameEntity.getApk().get(0).getUrl()); if (downloadEntity != null) { progressBar.setProgress((int) (downloadEntity.getPercent() * 10)); switch (downloadEntity.getStatus()) { diff --git a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt index 0e63fac98f..84b9489365 100644 --- a/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt +++ b/app/src/main/java/com/gh/common/util/DownloadItemUtils.kt @@ -219,7 +219,7 @@ object DownloadItemUtils { } } } else if (gameEntity.getApk().size == 1) { - val downloadEntity = DownloadManager.getInstance(context).getDownloadEntityByUrl(gameEntity.getApk()[0].url) + val downloadEntity = DownloadManager.getInstance(context).getDownloadEntitySnapshotByUrl(gameEntity.getApk()[0].url) if (downloadEntity != null) { downloadBtn.apply { val status = downloadEntity.status @@ -809,7 +809,7 @@ object DownloadItemUtils { adapter: RecyclerView.Adapter?, refreshCallback: EmptyCallback? ) { val apkEntity = gameEntity.getApk()[0] - val downloadEntity = DownloadManager.getInstance(context).getDownloadEntityByUrl(apkEntity.url) + val downloadEntity = DownloadManager.getInstance(context).getDownloadEntitySnapshotByUrl(apkEntity.url) if (downloadEntity != null) { val path = downloadEntity.path when { diff --git a/app/src/main/java/com/gh/common/util/GameUtils.java b/app/src/main/java/com/gh/common/util/GameUtils.java index 76c3e8dc41..dca9517419 100644 --- a/app/src/main/java/com/gh/common/util/GameUtils.java +++ b/app/src/main/java/com/gh/common/util/GameUtils.java @@ -105,7 +105,7 @@ public class GameUtils { } } - downloadEntity = DownloadManager.getInstance(context).getDownloadEntityByUrl(apkEntity.getUrl()); + downloadEntity = DownloadManager.getInstance(context).getDownloadEntitySnapshotByUrl(apkEntity.getUrl()); if (downloadEntity != null) { if (downloadEntity.getStatus().equals(DownloadStatus.done)) { doneCount++; @@ -191,7 +191,7 @@ public class GameUtils { } } - downloadEntity = DownloadManager.getInstance(context).getDownloadEntityByUrl(apkEntity.getUrl()); + downloadEntity = DownloadManager.getInstance(context).getDownloadEntitySnapshotByUrl(apkEntity.getUrl()); if (downloadEntity != null) { if (downloadEntity.getStatus().equals(DownloadStatus.done)) { doneCount++; diff --git a/app/src/main/java/com/gh/download/DownloadManager.java b/app/src/main/java/com/gh/download/DownloadManager.java index 6428240fe1..2c58b82a6c 100644 --- a/app/src/main/java/com/gh/download/DownloadManager.java +++ b/app/src/main/java/com/gh/download/DownloadManager.java @@ -527,13 +527,25 @@ public class DownloadManager implements DownloadStatusListener { * @param url 下载链接 * @return null表示下载列表中不存在该任务,否则返回下载任务 */ - // TODO 避免每次访问都从数据库里取数据 @Nullable + @WorkerThread public DownloadEntity getDownloadEntityByUrl(String url) { if (TextUtils.isEmpty(url)) return null; return mDownloadDao.get(url); } + /** + * 根据 url 获取下载任务 (仅保证下载状态一致) + * + * @param url 下载链接 + * @return null表示下载列表中不存在该任务,否则返回下载任务 + */ + @Nullable + public DownloadEntity getDownloadEntitySnapshotByUrl(String url) { + if (TextUtils.isEmpty(url)) return null; + return mDownloadDao.getSnapshot(url); + } + /** * 根据包名获取某一个下载任务 (涉及数据库查询,请优先在子线程调用) * @@ -651,7 +663,6 @@ public class DownloadManager implements DownloadStatusListener { private void putStatus(String url, DownloadStatus status) { statusMap.put(url, status); - onTaskStatusChanged(getDownloadEntityByUrl(url)); } public DownloadStatus getStatus(String url) { diff --git a/libraries/LGLibrary b/libraries/LGLibrary index 7b7d13d471..4e546b789c 160000 --- a/libraries/LGLibrary +++ b/libraries/LGLibrary @@ -1 +1 @@ -Subproject commit 7b7d13d47190581c24ae5f89b02a2d7e78ccde7f +Subproject commit 4e546b789cc08a65bf7484e1346fcdac6f7ecf55