Binder线程,Progress Bar和OutOfResourcesExceptions

时间:2011-07-22 20:06:56

标签: android android-layout android-progressbar

我正在测试我的应用程序。这是我的方案

1)从我的工作线程中我显示了一个进度条(我将消息传递给在ui上创建的处理程序)。我等待我的工作线程,直到调用pd.show(),然后我恢复我的工作线程

2)对工作线程执行操作

3)取消进度对话框。我再次将消息传递给在ui上创建的处理程序并等待工作线程直到调用pd.dismiss

为了进行压力测试,我已将其置于10000次迭代循环中。在我的Nexus上,一切都很好。在Galaxy选项卡和所有motorola设备上,经过大约50次左右的迭代,我的应用程序正在关闭。我看到BinderThreads慢慢增长到16并停止增长(我知道16是BinderThreads的最大限制)。在Nexus One上,这些会在以后引起任何问题。我在galaxy tab和moto设备的logcat中得到了这个

 W/WindowManager( 1363): OutOfResourcesException creating surface
 I/WindowManager( 1363): Out of memory for surface!  Looking for leaks...
 W/WindowManager( 1363): No leaked surfaces; killing applicatons!

编辑:在解除进度对话框后,我将其设置为null,以确保它不会保留任何内容。

有什么想法吗?

谢谢,

Veeresh

3 个答案:

答案 0 :(得分:0)

也许你没有足够的记忆来创造更多的表面!

答案 1 :(得分:0)

在我的情况下,我有一个产生95个对话框的错误,它们是进度条指示器的表兄弟。所以,这导致了我的资源异常

答案 2 :(得分:0)

尝试禁用此活动的hw渲染。

如果由硬件加速引起异常,它可能会有所帮助。

我最近在我们的应用程序中修复了类似的问题。

但要解决这个问题的原因可能真的很难。 :(