为啥水平应用程序在 onPause() 之后创建垂直活动

Posted

技术标签:

【中文标题】为啥水平应用程序在 onPause() 之后创建垂直活动【英文标题】:why horizontal application create vertical activity after onPause()为什么水平应用程序在 onPause() 之后创建垂直活动 【发布时间】:2019-01-11 03:23:21 【问题描述】:

我的应用应该只是水平的。在 AndroidManifest.xml 我有android:screenOrientation="sensorLandscape"。 但是当我按下电源按钮(关闭设备)然后再次按下电源按钮(打开设备)时,我可以看到一些问题。通过调试过程,我可以看到我的应用程序经历了以下步骤:

按下电源按钮->onPause()->onSaveInstance()->onStop()->onDestroy()->onCreate()->onStart()->onResume()->onPause()。我可以看到创建了 HORIZONTAL 活动,但它的大小等于垂直屏幕!

然后:按下电源按钮->onResume()->onPause()->onSaveInstante()->onStop()->onDestroy()->onCreate()->onStart ()->onResume()。 并创建了所需的水平活动。

我的错误在哪里?我应该首先在任何地方设置屏幕尺寸吗?

我理解了这个问题:当我按下电源按钮时,方向发生了变化(锁定屏幕默认为纵向),这导致调用 onCreate()。 那我该怎么办?

【问题讨论】:

在清单中使用这个而不是 sensorLandscape ..android:screenOrientation="landscape" 它不起作用(你能告诉我为什么需要在暂停之前创建新活动吗? 检查您是否以编程方式在代码中的任何位置更改了方向? 在 setContentView 之前的 onCreate 中写入 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 只在横向模式下运行你的应用程序 不,一点也不。 【参考方案1】:

使用 android:configChanges="orientation|screenSize" 解决了这个问题。小菜一碟。

【讨论】:

以上是关于为啥水平应用程序在 onPause() 之后创建垂直活动的主要内容,如果未能解决你的问题,请参考以下文章

Android - 将 ProgressBar 设置为垂直条而不是水平条?

如何防止 onPause() 之后调用 onDestroy()?

android一个示例同时在onSaveInstanceState和onPause中调用数据保存函数,这是为啥?

如何使用卡片创建水平滚动 RecyclerView

为啥我不能在 Android 的水平线性布局中添加超过 2 个元素?

相对于jetpack中的其他元素创建垂直链组成ConstraintLayout?