Связующая нить, индикатор выполнения и исключения OutOfResourcesException - PullRequest
2 голосов
/ 23 июля 2011

Я тестирую приложение.Вот мой сценарий

1) Из моего рабочего потока я показываю индикатор выполнения (я передаю сообщение обработчику, созданному в пользовательском интерфейсе).Я жду в своем рабочем потоке, пока не будет вызван pd.show (), затем возобновляю мой рабочий поток

2) выполняю операцию в рабочем потоке

3) закрывает диалоговое окно прогресса.Опять же, я передаю сообщение обработчику, созданному в пользовательском интерфейсе, и жду рабочего потока, пока pd.dismiss не будет назван

. Для стресс-теста я поместил это в цикл итерации 10000.На моем Nexus все работает в основном нормально.На вкладке galaxy и на всех устройствах Motorola примерно через 50 итераций мое приложение принудительно закрывается.Я вижу, что BinderThreads медленно увеличивается до 16 и перестает расти (я знаю, что 16 - это максимальный предел для BinderThreads).На Nexus One это вызывает проблемы позже.Я получил это в logcat of galaxy tab и moto devices

 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!

edit: после закрытия диалогового окна прогресса я устанавливаю его в null, чтобы убедиться, что он ничего не держит.

Есть идеи?

Спасибо,

Veeresh

Ответы [ 3 ]

0 голосов
/ 30 августа 2012

В моем случае у меня была ошибка, которая порождала около 95 диалоговых окон, которые являются двоюродными братьями для индикатора выполнения.Итак, это вызвало мое исключение из нехватки ресурсов

0 голосов
/ 06 ноября 2013

Попробуйте отключить рендеринг hw для этого действия.

Это может помочь в случае исключения, вызванного ускорением HW.

Я недавно исправил подобную проблему в нашем приложении.

Но может быть очень трудно устранить причину этой проблемы. (

0 голосов
/ 23 июля 2011

Возможно, вам не хватает памяти, чтобы создать больше поверхности!

...