Android13 切换壁纸导致前台应用重启问题

问题描述

Android13 项目壁纸定时轮播时导致前台应用重启。


原因分析:

Android12 系统版本以后添加主题跟随壁纸颜色功能,这个特性叫monet(莫耐)。可以从壁纸中获取颜色,并根据获取的颜色调整整个系统的主题颜色,包括快捷设置、通知,还有设置菜单中的按钮和滑条等;修改壁纸时,由于monet的功能特性,会重启前台应用以适配新的主题色,导致部分应用重启。


解决方案:

1. 代码中注释主题色对比功能,避免触发重启前台应用重启。

frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java

....

 /**
     * Checks if the color scheme in mColorScheme matches the current system palettes.
     * @param managedProfiles List of managed profiles for this user.
     */
    private boolean colorSchemeIsApplied(Set<UserHandle> managedProfiles) {
    	//注释逻辑判断,直接返回true
        /*final ArraySet<UserHandle> allProfiles = new ArraySet<>(managedProfiles);
        allProfiles.add(UserHandle.SYSTEM);
        for (UserHandle userHandle : allProfiles) {
            Resources res = userHandle.isSystem()
                    ? mResources : mContext.createContextAsUser(userHandle, 0).getResources();
            if (!(res.getColor(android.R.color.system_accent1_500, mContext.getTheme())
                    == mColorScheme.getAccent1().get(6)
                    && res.getColor(android.R.color.system_accent2_500, mContext.getTheme())
                    == mColorScheme.getAccent2().get(6)
                    && res.getColor(android.R.color.system_accent3_500, mContext.getTheme())
                    == mColorScheme.getAccent3().get(6)
                    && res.getColor(android.R.color.system_neutral1_500, mContext.getTheme())
                    == mColorScheme.getNeutral1().get(6)
                    && res.getColor(android.R.color.system_neutral2_500, mContext.getTheme())
                    == mColorScheme.getNeutral2().get(6))) {
                return false;
            }
        }*/
        return true;
    }
...

2.关闭monet 功能

frameworks/base/packages/SystemUI/res/values/flags.xml

flag_monet 设置为false 即可关闭monet 功能

<bool name="flag_monet">false</bool>
 @Override
    public void start() {
      ....

        if (!mIsMonetEnabled) { //判断monet功能是否打开
            return;
        }

      ....
    }

mIsMonetEnabled = featureFlags.isEnabled(Flags.MONET);

参考

禁用Android12 的monet功能(主题颜色随壁纸动态变化)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值