You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已配置android:configChanges="orientation|screenSize",为何PdfViewActivity旋转设备时仍重启而MainActivity正常?

为什么PdfViewActivity旋转时会重启?

这个问题我之前帮朋友排查过,大概率是几个容易忽略的细节出了问题,咱们一步步来捋:

  • 先确认清单配置是否真的生效
    别着急看代码,先打开Android Studio的「Merged Manifest」(在清单文件编辑器底部),检查PdfViewActivity最终生效的android:configChanges属性:

    • 有没有拼写错误?比如screenSize是驼峰写法,别写成全小写的screensize;竖线分隔符有没有漏写?
    • 配置是不是直接写在<activity>标签内?有没有不小心嵌套到<intent-filter>或者其他子标签里?
    • 多模块项目里,子模块的清单配置会不会被主模块覆盖?
      正确的配置应该是这样:
    <activity
        android:name=".PdfViewActivity"
        android:configChanges="orientation|screenSize" />
    
  • 第三方PDF库可能在搞事情
    很多主流的PDF查看库(比如AndroidPdfViewer)内部可能有自己的配置处理逻辑,有些旧版本甚至会强制重启Activity来适配屏幕变化。你可以:

    • 检查库的官方文档,看看有没有禁用自动重启的配置项;
    • 尝试更新到库的最新版本,说不定已经修复了这个问题;
    • 如果是用Fragment承载PDFView,确认有没有给Fragment设置setRetainInstance(true),避免Fragment重建触发Activity重启。
  • 固定屏幕方向的冲突
    如果PdfViewActivity的清单里同时设置了android:screenOrientation="portrait"或者landscape,旋转设备时系统其实不会触发orientation类型的配置变化(因为方向被锁死了),但如果代码里有动态切换方向的逻辑,或者库强制修改了方向,就可能和configChanges的配置冲突,导致Activity重启。可以先暂时去掉screenOrientation属性测试一下。

  • 重写onConfigurationChanged时漏了关键调用
    虽然不重写这个方法也不会导致重启,但如果PdfViewActivity里重写了onConfigurationChanged,却没有调用super.onConfigurationChanged(newConfig),会打乱系统的配置处理逻辑,间接引发重启。检查代码里有没有这个问题:

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig); // 这行必须要有!
        // 你的自定义适配逻辑
    }
    
  • 有没有动态修改配置的代码?
    看看PdfViewActivity里有没有调用过setRequestedOrientation()、getResources().updateConfiguration()这类改变配置的方法?这些操作会绕过configChanges的设置,强制触发Activity重启。比如加载PDF后动态锁定方向的逻辑,就可能踩这个坑。

建议先从「Merged Manifest」检查开始,这是最容易排查的点,再一步步排除其他可能性。

内容的提问来源于stack exchange,提问作者Thetpaing Win

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:47:43