学员作业:如何实现Android12版本以后Wallpaper设置以后Activity不会重启?

背景:

在分享了关于Configration如何触发Activity重新recreate文章:
Activity的reLaunch及onConfigurationChanged android源码分析
在文章发布后,就有热情的粉丝朋友进行留言:
在这里插入图片描述
这个粉丝反馈在Android 12以后版本,只要设置有Wallpaper切换后,就发现Activity会进行重启问题,问如何规避?
针对这个设置壁纸后会导致Activity进行重启问题,其实在原来公司也有遇到和处理过,所以针对这样一个问题其实还是比较熟悉的。

Android12以后壁纸切换为啥导致Activity重启

先来说说为啥壁纸切换后会导致Activity的进行重启,主要原因还是如下:

android12新增加特殊,增加了monet的功能:

Android 12基于壁纸的主题设置工具“Monet”,将带来的全新主题设置工具可以从壁纸中选择颜色,并根据选择的颜色调整整个系统的配色,包括快捷设置、通知,还有设置菜单中的按钮和滑条等,这个新工具的代号为“Monet”.
上面既可以看出,实际上壁纸切换后导致Activity重启其实属于一个功能,因为壁纸切换后会导致主题颜色等有变化,这样各个Activity相关的控件view等需要跟随壁纸颜色风格走,自然就会导致Activity要重新刷新。

如何屏蔽不让Activity重启?

这里大家可能会说,既然是新功能monet引入导致的Activity重启,那么是否可以考虑直接关闭monet功能呢?

方案1

其实如果说公司产品可以不需要通过任何google的cst等认证来说,直接屏蔽monet功能是完全可以的哈,这里大家可以进行如下修改:

diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml
index 49dd574af829..8182bbe2fb9e 100644
--- a/packages/SystemUI/res/values/flags.xml
+++ b/packages/SystemUI/res/values/flags.xml
@@ -18,7 +18,7 @@
 <resources>
     <bool name="are_flags_overrideable">false</bool>
 
-    <bool name="flag_monet">true</bool>
+    <bool name="flag_monet">false</bool>
 
     <!-- People Tile flag -->
     <bool name="flag_conversations">false</bool>

屏蔽monet修改其实很简单,只需要到frameworks/base/packages/SystemUI/res/values/flags.xml把flag_monet变成false既可以。

修改验证对比:
修改前:
不同壁纸指针颜色不同

不同壁纸指针颜色不同
日志可以看出Launcher进行了重启
在这里插入图片描述

修改后:
android/com.android.internal.app.PlatLogoActivity显示指针颜色不会随壁纸变化

壁纸不同指针颜色相同

events日志可以看出Launcher并没有进行recreate
在这里插入图片描述

直接屏蔽缺点即学员作业

上面的方案1直接关闭monet方案有一个比较大缺点就是直接让功能都没有了,最重要是一旦这个功能关闭了,会导致google一些认证测试无法通过,所以正规厂商都不可以直接关闭monet功能。
那么大家还有更好的方案么?这里给各个学员步骤个作业,提出一下几个要求:
目标保留monet功能,但是前台Activity又可以不进行重启在壁纸切换后
1、保留monet功能,不可以直接屏蔽,因为会导致google相关认证不通过
2、需要实现针对让每个app自己Manifest中配置相关属性等来标记自己Activity在壁纸切换后不重启
3、不可以直接关闭切换壁纸时候都不让Activity重启,因为测试的相关Activity可能会检测自己是否重启

更多framework实战干货,请关注下面“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值