1、解决资源释放异常状态失效问题
This commit is contained in:
shenzuqiang 2026-03-11 17:33:14 +08:00
parent decdad3de1
commit 328b62e757
4 changed files with 87 additions and 65 deletions

View File

@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-03-11T08:00:19.371243300Z">
<DropdownSelection timestamp="2026-03-11T09:00:47.807813Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=Y5DELZR46DZTCI9D" />
<DeviceId pluginId="PhysicalDevice" identifier="serial=JRBI89BIE6AI5TG6" />
</handle>
</Target>
</DropdownSelection>

View File

@ -56,6 +56,10 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.img.rabbit.bean.request.ReportKey
import com.img.rabbit.bean.request.ReportRequest
import com.img.rabbit.bean.request.ReportType
import com.img.rabbit.components.CenterToast
import com.img.rabbit.components.GlobalToast
import com.img.rabbit.config.Constants
import com.img.rabbit.config.Constants.agreementUrl
@ -114,7 +118,16 @@ class MainActivity : ComponentActivity(), LoadingCallback {
val updateUserConfigNotify by GlobalStateManager(context).globalUserConfigNotifyFlow().collectAsState(initial = false)
val updateUniUpdateNotify by GlobalStateManager(context).globalUniUpdateNotifyFlow().collectAsState(initial = false)
val updateGlobalLoadingNotify by GlobalStateManager(context).isGlobalLoadingFlow().collectAsState(initial = false)
//重置状态信息(防止异常退出导致状态失效)
LaunchedEffect(Unit) {
GlobalStateManager(context).apply {
storeGlobalUpdateNotify(false)
storeGlobalUniDownloadNotify(false)
storeGlobalUserConfigNotify(false)
storeGlobalUniUpdateNotify(false)
storeGlobalLoading(false)
}
}
// 设置启动页显示条件
splashScreen.setKeepOnScreenCondition {
@ -171,6 +184,76 @@ class MainActivity : ComponentActivity(), LoadingCallback {
}
}
//提示下载小程序资源(在跳转指定页面时,未下载资源需要提示)
val progressWGTToPageState = mutableFloatStateOf(0f)
LaunchedEffect(updateUniDownloadNotify) {
if(updateUniDownloadNotify == true) {
UniAppUtils.currentDownloadUniMp?.let{
UniAppUtils.downloadReleaseWgt(
coroutineScope,
it,
onProgress = { uniState, progress ->
when (uniState) {
UniMpUpdate.DOWNLOAD_START -> {
//资源开始下载
progressWGTToPageState.floatValue = 0f
Log.i("HomeScreen", "DOWNLOAD_START")
}
UniMpUpdate.DOWNLOAD_FINISH -> {
//资源下载完成
progressWGTToPageState.floatValue = 1f
Log.i("HomeScreen", "DOWNLOAD_FINISH")
coroutineScope.launch {
GlobalStateManager(context).storeGlobalUniDownloadNotify(
false
)
}
}
UniMpUpdate.DOWNLOAD_FAIL -> {
//资源下载失败
progressWGTToPageState.floatValue = -1f
Log.i("HomeScreen", "DOWNLOAD_FAIL")
coroutineScope.launch {
GlobalStateManager(context).storeGlobalUniDownloadNotify(
false
)
}
}
else -> {
//资源下载进度
if (progress != null) {
progressWGTToPageState.floatValue = progress
Log.i("HomeScreen", "DOWNLOAD_PROGRESS:$progress")
}
}
}
},
onRelease = { isSuccess->
if(isSuccess){
//资源下载完成后,启动小程序到指定位置
val uniMpEntity = UniAppUtils.currentDownloadUniMp
if (uniMpEntity != null && UniAppUtils.isRelease(uniMpEntity.unimp_id)) {
UniAppUtils.startUniMpPage(
context = context,
uniMpId = uniMpEntity.unimp_id,
uniMpType = uniMpEntity.unimp_type,
pagePath = UniAppUtils.currentUniMpJumpPatch ?: "",
reportViewModel = reportViewModel
)
}
}
},
reportViewModel = reportViewModel
)
}
}
}
AppTheme {
SplashScreenContent{
//未同意提示政策弹窗
@ -217,67 +300,8 @@ class MainActivity : ComponentActivity(), LoadingCallback {
}
//提示下载小程序资源(在跳转指定页面时,未下载资源需要提示)
val progressWGTToPageState = mutableFloatStateOf(0f)
if(updateUniDownloadNotify == true){
UniAppUtils.currentDownloadUniMp?.let {
UniAppUtils.downloadReleaseWgt(
coroutineScope,
it,
onProgress = { uniState, progress ->
when (uniState) {
UniMpUpdate.DOWNLOAD_START -> {
//资源开始下载
progressWGTToPageState.floatValue = 0f
Log.i("HomeScreen", "DOWNLOAD_START")
}
UniMpUpdate.DOWNLOAD_FINISH -> {
//资源下载完成
progressWGTToPageState.floatValue = 1f
Log.i("HomeScreen", "DOWNLOAD_FINISH")
coroutineScope.launch {
GlobalStateManager(context).storeGlobalUniDownloadNotify(
false
)
}
}
UniMpUpdate.DOWNLOAD_FAIL -> {
//资源下载失败
progressWGTToPageState.floatValue = -1f
Log.i("HomeScreen", "DOWNLOAD_FAIL")
coroutineScope.launch {
GlobalStateManager(context).storeGlobalUniDownloadNotify(
false
)
}
}
else -> {
//资源下载进度
if (progress != null) {
progressWGTToPageState.floatValue = progress
Log.i("HomeScreen", "DOWNLOAD_PROGRESS:$progress")
}
}
}
},
onRelease = {
//资源下载完成后,启动小程序到指定位置
val uniMpEntity = UniAppUtils.currentDownloadUniMp
if (uniMpEntity != null) {
UniAppUtils.startUniMpPage(
context = context,
uniMpId = uniMpEntity.unimp_id,
uniMpType = uniMpEntity.unimp_type,
pagePath = UniAppUtils.currentUniMpJumpPatch ?: "",
reportViewModel = reportViewModel
)
}
},
reportViewModel = reportViewModel
)
TipsUniMpToPageDialog(
title = "下载资源",
content1 = "需要下载完资源才能运行,请稍后...",

View File

@ -118,8 +118,6 @@ fun HomeScreen(
if(updateUserConfigNotify == true){
homeIconConfig = PreferenceUtil.getUserConfig()?.config?.homeIconEntity
uniVersionConfig = PreferenceUtil.getUserConfig()?.config?.uniVersionEntity
Log.i(TAG,"-------------->HomeScreen页面用户配置已经刷新")
}
}

View File

@ -102,7 +102,7 @@ object UniAppUtils {
return FileUtils.instance?.fileIsExists(wgtFile) == true && FileUtils.getFileSize(wgtFile) > 0
}
private fun isRelease(uniMpId: String): Boolean{
fun isRelease(uniMpId: String): Boolean{
return DCUniMPSDK.getInstance().isExistsApp(uniMpId)
}