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