diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt index a0ac7bae51..b7cc7d6b83 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageFilterManager.kt @@ -35,17 +35,21 @@ class PackageFilterManager { if (appendOnly) { // 添加因为异常而没能正常更新的包名列表 - finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + synchronized(PackageRepository.mPendingPackageNameSet) { + finalPackageList.addAll(PackageRepository.mPendingPackageNameSet) + } } RetrofitManager.getInstance() .newApi - .postInstalledAppList(packageList.toRequestBody()) + .postInstalledAppList(finalPackageList.toRequestBody()) .subscribeOn(Schedulers.io()) .subscribe(object : BiResponse() { override fun onSuccess(data: PackageFilter) { mPackageKey = data.key - PackageRepository.mPendingPackageNameSet.clear() + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.removeAll(finalPackageList) + } val partialPackageList = arrayListOf() @@ -78,7 +82,9 @@ class PackageFilterManager { super.onFailure(exception) if (appendOnly) { - PackageRepository.mPendingPackageNameSet.addAll(packageList) + synchronized(PackageRepository.mPendingPackageNameSet) { + PackageRepository.mPendingPackageNameSet.addAll(finalPackageList) + } } else { if (exception is retrofit2.HttpException && exception.code() == 403) { // 403 代表 key 过期,需要重新获取 diff --git a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt index 35d4673fb9..b7644b7f73 100644 --- a/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt +++ b/app/src/main/java/com/gh/gamecenter/packagehelper/PackageRepository.kt @@ -85,7 +85,7 @@ object PackageRepository { _recentVaPlayedChanged.postValue(Unit) } val packageFilterManager = PackageFilterManager() - var mPendingPackageNameSet = hashSetOf() // 因遇到异常而等待下次操作更新的包名列表 + var mPendingPackageNameSet = Collections.synchronizedSet(hashSetOf()) // 因遇到异常而等待下次操作更新的包名列表 var mValidPackageNameSet = hashSetOf() // 已被收录的游戏包名列表