【问题标题】:Black screen when device orientation changed设备方向更改时黑屏
【发布时间】:2011-02-02 13:55:26
【问题描述】:

我正在 android 2.2 中开发一个应用程序。

当更改设备方向(通过旋转设备)时,在我的 Activity 的边界上绘制了一个黑屏(甚至没有 Activity 标题),这需要几秒钟(7-15 秒)然后 Activity 是终于画好了。

我已经测试了它的模拟器和两个不同的设备,并且行为是相同的。

在 LogCat 中我有下一个输出:

02-02 09:18:06.044: WARN/WindowManager(1300): MyActivity freeze timeout expired.

02-02 09:18:06.044: WARN/WindowManager(1300): Force clearing freeze: AppWindowToken{4515af88 token=HistoryRecord{44f52458 com.project.package/.MyActivity}}

02-02 09:18:08.054: WARN/WindowManager(1300): Window freeze timeout expired.

02-02 09:18:08.054: WARN/SurfaceFlinger(1300): timeout expired mFreezeDisplay=1, mFreezeCount=0

02-02 09:18:08.054: WARN/WindowManager(1300): Force clearing orientation change: Window{45178a00 com.project.package/com.project.package.Activity paused=false}

我不知道为什么会这样。 感谢 cmets、建议和答案。

【问题讨论】:

  • 你能发布你的onCreate & onResume吗?
  • 如果活动一开始正常启动,然后在方向更改后冻结,也可能是活动拆解中的某些内容。查看onPause 或其他“生命周期结束”方法(如果有)可能会很有用。

标签: android


【解决方案1】:

感谢cmets,抱歉回复晚了。

问题是我的应用程序中有一个非常大的列表(ListView 中接近 2000 行)。如果我不绘制该列表,则该应用程序很好。

可以理解,2000行,每一行都有图标和文字,太多了!

所以我决定实现一个索引,或者说是android Market的非常智能的列表(这个列表很棒,没有索引,只是画出你靠近看到的行)。

我想,当设备旋转(带有大列表)时,它会尝试删除引用或类似的东西,这需要很长时间,并且会引发超时,这就是显示黑屏的原因.但这只是一个假设

我尝试在 onPause() 中清理列表,但没有解决问题。

无论如何,问题是:Activity 中的 View 对象太多。 我的解决方案:使用索引列表(不要在 Activity 中使用太多 View 对象)。

希望这对其他人有用。

【讨论】:

  • 不是很清楚,但是你用的是ListView吗?如果是这样,您应该使用ListAdapter 并让 Android 在必要时请求创建和重用列表项。这将节省资源,并使您的应用更具响应性。
猜你喜欢
  • 2014-06-09
  • 2012-07-08
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多