uni-app ios端tab页面onhide生命周期恢复屏幕亮度时应用直接进入后台导致亮度恢复失效

uni-app ios端tab页面onhide生命周期恢复屏幕亮度时应用直接进入后台导致亮度恢复失效

操作步骤:

三个tab页,点击中间tab页屏幕高亮,点击其他页面亮度恢复初始亮度,在高亮页应用直接进入后台,亮度不会恢复

预期结果:

三个tab页,点击中间tab页屏幕高亮,点击其他页面亮度恢复初始亮度,在高亮页应用直接进入后台,亮度也能正常恢复

实际结果:

三个tab页,点击中间tab页屏幕高亮,点击其他页面亮度恢复初始亮度,在高亮页应用直接进入后台,亮度不会恢复

bug描述:

tab页面中,在onshow生命周期获取初始屏幕亮度,然后把屏幕亮度设置为0.8,在onhide生命周期把亮度恢复,点击其他tab页,亮度恢复正常,但是在高亮页,应用直接进入后台,亮度恢复不生效


更多关于uni-app ios端tab页面onhide生命周期恢复屏幕亮度时应用直接进入后台导致亮度恢复失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

APP进入后台不会触发页面的onhide吧,把写在App.vue的onHide试下,或者在页面监听一下APP进入后台事件

更多关于uni-app ios端tab页面onhide生命周期恢复屏幕亮度时应用直接进入后台导致亮度恢复失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于iOS系统对后台应用的限制导致的。当应用进入后台时,系统会暂停大部分JavaScript执行,包括onHide生命周期函数,导致亮度恢复代码无法执行。

解决方案:

  1. 使用plus.screen的亮度锁定功能: 在设置高亮度时,同时调用plus.screen.setBrightness()并设置lockBright参数为false,避免系统自动恢复亮度。

    // 设置高亮度
    plus.screen.setBrightness(0.8, { lockBright: false });
    
  2. 监听应用前后台切换事件: 在App.vue或页面中监听onHideonShow事件,确保应用从后台返回时恢复亮度。

    // App.vue
    export default {
        onHide() {
            // 保存当前亮度状态,用于恢复
            this.$store.commit('setLastBrightness', plus.screen.getBrightness());
            plus.screen.setBrightness(0.5); // 恢复默认亮度
        },
        onShow() {
            // 应用返回前台时恢复之前的亮度
            const lastBrightness = this.$store.state.lastBrightness;
            if (lastBrightness) {
                plus.screen.setBrightness(lastBrightness);
            }
        }
    }
    
  3. 使用uni.onAppHideuni.onAppShow全局监听: 在应用入口处设置全局监听,确保即使Tab页未触发onHide也能处理亮度恢复。

    // main.js或App.vue
    uni.onAppHide(() => {
        plus.screen.setBrightness(0.5);
    });
回到顶部