我是靠谱客的博主 曾经钢铁侠,这篇文章主要介绍旋转屏幕导致 Fragment 中的 onConfigurationChanged 被调用两次环境问题描述问题分析问题解决参考文献,现在分享给大家,希望可以做个参考。

环境

IDE
Android Studio Dolphin 2021.3.1;

项目配置
Android Gradle plugin version: 7.1.3
Gradle Version: 7.2
Gradle JDK: 11
Compile Sdk Version: 32

问题描述

项目使用的 Bottom Navigation Activity 基本结构,在调试程序时发现,当旋转屏幕时,Fragment 的 onConfigurationChanged 被调用两次。

这与一直以来的逻辑不相符,初始怀疑是项目中自己的某些代码导致。使用 AS 模板创建一个 Bottom Navigation Activity 新项目(以下简称”标准项目“),调试没有出现该现象。

虽然被调用两次暂时不会对项目造成影响,但这种超出认知的还是希望能确认来源。

问题分析

首先使用简单的 Debug,发现走的逻辑与标准项目不一样,但没有发现导致问题的点在哪儿。

后面尝试删除些代码,问题依旧。一不做二不休,来个彻底检查,删除一部分独立页面功能,然后 AS 上 Build -> Clean Project,然后再编译运行测试,循环往复,但问题依旧。

最后已经除了与标准项目相同的结构,已经没有任何与项目相关的东西,但问题依旧存在。

这个时候就不得不怀疑是配置或依赖相关的了。将项目配置改为一致后,问题依旧存在。最后只剩依赖项了。标准项目的依赖项中是如下:

implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
implementation 'androidx.navigation:navigation-fragment:2.4.1'
implementation 'androidx.navigation:navigation-ui:2.4.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

我的项目是:

implementation fileTree(include: ['*.jar'], dir: "libs")
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
implementation 'androidx.navigation:navigation-fragment:2.5.2'
implementation 'androidx.navigation:navigation-ui:2.5.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

将标准项目的依赖拷贝到我的项目里面后,编译运行,正常了。

问题解决

到这里问题就解决了。新的依赖中,某个依赖项(多半是 fragment 或 navigation)实现上有差异。至于这种调用两次 onConfigurationChanged 出于何种原因,这里就不深究了。

参考文献

目前没有搜到相同问题的博文,大概正常情况下很难注意到这点。排查方式也没什么科技含量。

最后

以上就是曾经钢铁侠最近收集整理的关于旋转屏幕导致 Fragment 中的 onConfigurationChanged 被调用两次环境问题描述问题分析问题解决参考文献的全部内容,更多相关旋转屏幕导致内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部