fix: 游戏更新多线程导致状态错误
This commit is contained in:
@ -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 {
|
||||
|
||||
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
6
module_core/proguard-rules.pro
vendored
6
module_core/proguard-rules.pro
vendored
@ -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
2
vasdk
Submodule vasdk updated: 0a6c6c2e38...1c0b8ef16d
Reference in New Issue
Block a user