fix: 游戏更新多线程导致状态错误

This commit is contained in:
yangfei
2024-03-29 14:48:22 +08:00
parent 2e95550783
commit 7322216c70
5 changed files with 41 additions and 21 deletions

View File

@ -58,6 +58,8 @@ object PackageRepository {
@Volatile
private var mIsInitialisingData = false
var installedPkgRefreshed = false
var vaPkgRefreshed = false
val gameUpdateLiveData = MutableLiveData<List<GameUpdateEntity>>()
val gameInstalledLiveData = MutableLiveData<List<GameInstall>>()
@ -73,37 +75,41 @@ object PackageRepository {
*/
@JvmStatic
fun initData() {
Utils.log("xxx", "PackageRepository::initData::mIsInitialisingData = $mIsInitialisingData")
if (mIsInitialisingData) return
mIsInitialisingData = true
installedPkgRefreshed = false
vaPkgRefreshed = false
runOnIoThread {
if (gameInstalled.isNotEmpty()) gameInstalled.clear()
if (mInstalledGameList.isNotEmpty()) mInstalledGameList.clear()
if (gameUpdate.isNotEmpty()) gameUpdate.clear()
if (gameUpdate.isNotEmpty()) {
gameUpdate.clear()
Utils.log("xxx", "清除更新数据")
}
if (mInstalledPkgList.isNotEmpty()) mInstalledPkgList.clear()
var installedPkgRefreshed = false
var vaPkgRefreshed = false
val list = PackageUtils.getAllPackageName(mApplication)
uploadAppList()
initFilterPackage(list) { filteredList ->
installedPkgRefreshed = true
mIsInitialisingData = !(installedPkgRefreshed && vaPkgRefreshed)
mInstalledPkgList.addAll(filteredList)
notifyInstallPkgData()
loadInstalledGameDigestAndNotifyData(filteredList)
Utils.log("xxx", "PackageRepository::filteredList::${filteredList}")
loadInstalledGameDigestAndNotifyData(filteredList) {
installedPkgRefreshed = true
mIsInitialisingData = !(installedPkgRefreshed && vaPkgRefreshed)
}
}
loadGhzsUpdate()
// 畅玩游戏更新
var allGames = VHelper.getAllVGameSnapshots()
if(allGames.isNullOrEmpty()) {
if (allGames.isNullOrEmpty()) {
VHelper.refreshVGameSnapshot()
allGames = VHelper.getAllVGameSnapshots()
}
@ -111,9 +117,15 @@ object PackageRepository {
if (allGamePkgNames.isNotEmpty()) {
notifyInstallPkgData()
updateFilterPackage(allGamePkgNames) {
vaPkgRefreshed = true
mIsInitialisingData = !(installedPkgRefreshed && vaPkgRefreshed)
loadInstalledGameDigestAndNotifyData(filteredList = allGamePkgNames, onWorkerThreadOnly = false, isVGame = true)
Utils.log("xxx", "PackageRepository::filteredList::${allGamePkgNames}")
loadInstalledGameDigestAndNotifyData(
filteredList = allGamePkgNames,
onWorkerThreadOnly = false,
isVGame = true
) {
vaPkgRefreshed = true
mIsInitialisingData = !(installedPkgRefreshed && vaPkgRefreshed)
}
}
}
}
@ -148,7 +160,8 @@ object PackageRepository {
PackageUtils.getGhVersionName(),
PackageUtils.getGhVersionCode(),
HaloApp.getInstance().channel,
Build.VERSION.SDK_INT)
Build.VERSION.SDK_INT
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Response<AppEntity>() {
@ -223,6 +236,7 @@ object PackageRepository {
filteredList: ArrayList<String>,
onWorkerThreadOnly: Boolean = false,
isVGame: Boolean = false,
loadFinishCallback: (() -> Unit)? = null
) {
var isNotifyUpdate = false
val maxPageCount = (filteredList.size / PAGE_SIZE) + 1
@ -231,6 +245,7 @@ object PackageRepository {
val latch = ObservableUtil.latch(maxPageCount, {
if (isNotifyUpdate || gameUpdateLiveData.value == null) notifyGameUpdateData()
notifyGameInstallData()
loadFinishCallback?.invoke()
}, Any())
while (++page <= maxPageCount) {
@ -390,7 +405,8 @@ object PackageRepository {
for (entity in gameUpdate) {
if (entity.packageName == data.packageName
&& entity.id == data.id
&& entity.isVGameUpdate == data.isVGameUpdate) {
&& entity.isVGameUpdate == data.isVGameUpdate
) {
isExist = true
}
}
@ -466,7 +482,8 @@ object PackageRepository {
val game = gameUpdate[j]
// 仅类型一致时移除更新实体
if (game.packageName == pkgName
&& game.isVGameUpdate == isVGame) {
&& game.isVGameUpdate == isVGame
) {
gameUpdate.remove(game)
notifyGameUpdateData()
} else {

View File

@ -3,9 +3,10 @@ package com.gh.gamecenter.packagehelper
import android.app.Application
import android.text.TextUtils
import androidx.lifecycle.*
import com.gh.gamecenter.feature.entity.GameInstall
import com.gh.gamecenter.entity.GameUpdateEntity
import com.gh.gamecenter.feature.entity.GameInstall
import com.halo.assistant.HaloApp
import com.lightgame.utils.Utils
import kotlin.collections.set
class PackageViewModel(
@ -79,6 +80,7 @@ class PackageViewModel(
if (mRepository.gameInstalled.size == 0
|| PackageFilterManager.hasPendingPackage()
) {
Utils.log("xxx", "PackageViewModel call initData")
mRepository.initData()
}
}

View File

@ -376,6 +376,7 @@ public class HaloApp extends MultiDexApplication {
RegionSettingHelper.getRegionSetting();
ExtensionsKt.doOnMainProcessOnly(this, () -> {
Utils.log("xxx", "HaloApp call initData");
PackageRepository.initData();
PackageHelper.refreshLocalPackageList();
PackageHelper.initList();

View File

@ -32,9 +32,9 @@
public static void logMethodWithParams(...);
}
-assumenosideeffects class com.lightgame.utils.Utils {
public static void log(...);
}
#-assumenosideeffects class com.lightgame.utils.Utils {
# public static void log(...);
#}
-assumenosideeffects class com.gh.gamecenter.core.utils.MtaHelper {
public static void onEvent(...);

2
vasdk

Submodule vasdk updated: 0a6c6c2e38...1c0b8ef16d