fix: 修复多线程操作曝光上报数据引起的闪退问题

This commit is contained in:
chenjuntao
2023-04-28 15:47:09 +08:00
parent d607c04c33
commit 16ced738ac
2 changed files with 28 additions and 23 deletions

View File

@ -54,9 +54,7 @@ object FixedRateJobHelper {
// 提交曝光数据
if (elapsedTime % EXPOSURE_PERIOD == 0L) {
runOnUiThread {
ExposureManager.commitSavedExposureEvents(true)
}
ExposureManager.commitSavedExposureEvents(true)
}
// 分片检测下载进度

View File

@ -5,6 +5,7 @@ import com.gh.gamecenter.BuildConfig
import com.gh.gamecenter.common.loghub.LoghubHelper
import com.gh.gamecenter.common.utils.FixedSizeLinkedHashSet
import com.gh.gamecenter.common.utils.toJson
import com.gh.gamecenter.core.AppExecutor
import com.gh.gamecenter.feature.exposure.ExposureEvent
import com.lightgame.utils.Utils
@ -30,19 +31,7 @@ object ExposureManager {
* Log a single exposure event.
*/
fun log(event: ExposureEvent) {
if (!exposureCache.contains(event.id)) {
exposureSet.add(event)
exposureCache.add(event.id)
} else {
Utils.log("Exposure", "遇到重复曝光事件,自动过滤 ${event.id} - ${event.payload.gameName}")
}
}
/**
* Log a collection of exposure event.
*/
fun log(eventList: List<ExposureEvent>) {
for (event in eventList) {
AppExecutor.logExecutor.execute {
if (!exposureCache.contains(event.id)) {
exposureSet.add(event)
exposureCache.add(event.id)
@ -50,27 +39,45 @@ object ExposureManager {
Utils.log("Exposure", "遇到重复曝光事件,自动过滤 ${event.id} - ${event.payload.gameName}")
}
}
commitSavedExposureEvents()
}
/**
* Log a collection of exposure event.
*/
fun log(eventList: List<ExposureEvent>) {
AppExecutor.logExecutor.execute {
for (event in eventList) {
if (!exposureCache.contains(event.id)) {
exposureSet.add(event)
exposureCache.add(event.id)
} else {
Utils.log("Exposure", "遇到重复曝光事件,自动过滤 ${event.id} - ${event.payload.gameName}")
}
}
commitSavedExposureEvents()
}
}
/**
* @param forcedUpload Ignore all restrictions.
*/
fun commitSavedExposureEvents(forcedUpload: Boolean = false) {
if (exposureSet.size < STORE_SIZE && !forcedUpload || exposureSet.size == 0) return
AppExecutor.logExecutor.execute {
if (exposureSet.size < STORE_SIZE && !forcedUpload || exposureSet.size == 0) return@execute
uploadExposures(exposureSet.toList(), forcedUpload)
uploadExposures(exposureSet, forcedUpload)
Utils.log("Exposure", "提交了${exposureSet.size}条曝光记录")
exposureSet.clear()
Utils.log("Exposure", "提交了${exposureSet.size}条曝光记录")
exposureSet.clear()
}
}
private fun eliminateMultipleBrackets(jsonWithMultipleBracket: String): String {
return jsonWithMultipleBracket.replace("[[", "[").replace("]]", "]")
}
private fun uploadExposures(eventList: List<ExposureEvent>, forced: Boolean) {
eventList.forEach {
private fun uploadExposures(eventSet: HashSet<ExposureEvent>, forced: Boolean) {
eventSet.forEach {
LoghubHelper.uploadLog(buildLog(it), LOG_STORE, forced)
it.recycle()
}