app处于后台时Activity和Fragment无法收到onConfigurationChanged回调问题解决

可通过Context注册一个监听registerComponentCallbacks来解决;

Context源码如下所示:
Add a new ComponentCallbacks to the base application of the Context, which will be called at the same times as the ComponentCallbacks methods of activities and other components are called. Note that you must be sure to use unregisterComponentCallbacks when appropriate in the future; this will not be removed for you.
After Build.VERSION_CODES.S, Registering the ComponentCallbacks to Context created via createWindowContext(int, Bundle) or createWindowContext(Display, int, Bundle) will receive ComponentCallbacks.onConfigurationChanged(Configuration) from Window Context rather than its base application. It is helpful if you want to handle UI components that associated with the Window Context when the Window Context has configuration changes.
    

public void registerComponentCallbacks(ComponentCallbacks callback) {
        getApplicationContext().registerComponentCallbacks(callback);
}

调用代码片段:

requireContext().registerComponentCallbacks(object :ComponentCallbacks{
            override fun onConfigurationChanged(newConfig: Configuration) {
               

                var mode = AppCompatDelegate.getDefaultNightMode()
                var text = when (mode) {
                    AppCompatDelegate.MODE_NIGHT_NO -> "现在是日间模式"
                    AppCompatDelegate.MODE_NIGHT_YES -> "现在是夜间模式"
                    else -> "当前模式未匹配"
                }

                Log.d("test","配置变动了 registerComponentCallbacks --- onConfigurationChanged mode = $mode--- $text  ")

}

 

当作笔记记录一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值