当设备被锁定并且处于横向时,ListAdapter getView在onPause之后调用



我有一个使用列表视图的应用程序。

应以下要求更新并更清楚地解释情况:在下面提出问题后,我想我找到了问题发生的确切顺序:

  1. 启动应用程序
  2. 转到横向
  3. 锁定屏幕->这会强制纵向,因为锁定屏幕处于纵向
  4. 屏幕上的片段和活动的onPause()被调用
  5. 大约1秒后,将为ListView中使用be的项调用Adapter.getView()
  6. 解锁屏幕
  7. onResume被调用

我的最佳猜测是,在步骤5中,调用getView()是因为锁定屏幕是纵向的。看起来Android试图将应用程序屏幕重新布局为纵向,尽管这是不需要的,因为屏幕已锁定。

这是意料之中的正常情况吗?我的逻辑是围绕这样一个事实构建的,即屏幕上的活动/片段的onResume总是在任何其他编码之前被调用。

所以我设法确认了这种行为的原因如下:

  • 屏幕锁定时,应用程序处于横向
  • 锁定屏幕本身固定在纵向

安卓系统强制重新布局"低于"锁屏的应用程序,因为两者都固定在不同的方向。

我没有找到任何方法来防止这种情况,除了强制应用程序屏幕方向,这在我的情况下不是一个选项。我找到的唯一解决方法是在每个Adapter.getView()实现的开头添加以下代码。

  public View getView(int index, View convertView, ViewGroup parent) {
        if (Utils.isScreenLocked()) {
            return aConvertView;
        }
  }

isScreenLocked()方法使用KeyGuardManager来检查屏幕是否锁定。