我有一个使用列表视图的应用程序。
应以下要求更新并更清楚地解释情况:在下面提出问题后,我想我找到了问题发生的确切顺序:
- 启动应用程序
- 转到横向
- 锁定屏幕->这会强制纵向,因为锁定屏幕处于纵向
- 屏幕上的片段和活动的onPause()被调用
- 大约1秒后,将为ListView中使用be的项调用Adapter.getView()
- 解锁屏幕
- onResume被调用
我的最佳猜测是,在步骤5中,调用getView()是因为锁定屏幕是纵向的。看起来Android试图将应用程序屏幕重新布局为纵向,尽管这是不需要的,因为屏幕已锁定。
这是意料之中的正常情况吗?我的逻辑是围绕这样一个事实构建的,即屏幕上的活动/片段的onResume总是在任何其他编码之前被调用。
所以我设法确认了这种行为的原因如下:
- 屏幕锁定时,应用程序处于横向
- 锁定屏幕本身固定在纵向
安卓系统强制重新布局"低于"锁屏的应用程序,因为两者都固定在不同的方向。
我没有找到任何方法来防止这种情况,除了强制应用程序屏幕方向,这在我的情况下不是一个选项。我找到的唯一解决方法是在每个Adapter.getView()实现的开头添加以下代码。
public View getView(int index, View convertView, ViewGroup parent) {
if (Utils.isScreenLocked()) {
return aConvertView;
}
}
isScreenLocked()方法使用KeyGuardManager来检查屏幕是否锁定。