环境
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 被调用两次环境问题描述问题分析问题解决参考文献的全部内容,更多相关旋转屏幕导致内容请搜索靠谱客的其他文章。
发表评论 取消回复