1

每隔一段时间(并且没有明显的复制步骤),设备就会进入屏幕完全卡住的状态。我所说的“抓住”是指绝对不会吸引任何东西。这种行为很像我们在主线程上进行了阻塞调用,但我已经能够在调试器上捕获该行为并确认这不是问题(更不用说我们没有收到来自安卓)。

更令人困惑的是,当我与屏幕交互时,我注意到应用程序通过我们的日志语句正常运行。因此,当我做出滚动手势时,我能够看到我们正在膨胀视图、进行适当的网络调用等等。该应用程序功能齐全,但屏幕未绘制任何内容。

在 Eclipse 中使用 UI XML 快照工具甚至可以显示应该出现在屏幕上的视图(尽管绘制的图像仍然是冻结的“屏幕截图”)。

我会注意到我们最近引入了动画,特别是使用 Nineoldandroids 项目来帮助我们向后移植一些功能。这个问题似乎出现在所有手机上(包括我的 4.2.2 Galaxy Nexus),但是,再一次,复制很困难。

我们完全无法解释这种行为,并希望能深入了解导致此问题的原因和/或如何解决此问题!

编辑:今天经过大量测试,似乎没有在任何视图上调用 draw(...) 。这可以解释为什么屏幕被“冻结”。Measure调用(这解释了为什么 UI XML 快照正确地显示了屏幕上应该显示的内容)。

4

1 回答 1

2

我们已经弄清楚出了什么问题,希望这对将来的某人有所帮助。

尽管我们仍然不确定具体是如何实现的,但我们的应用程序可以进入一个 onPreDraw 监听器已注册但从未取消注册的状态。此外,onPreDraw 监听器内部有一个状态导致它返回 false。因此,当 Android 遍历所有 onPreDraw 侦听器以确保它可以绘制时,我们不再引用的这个侦听器不断返回 false。消除这种情况似乎解决了我们的问题。

于 2013-03-28T13:58:00.870 回答