Приложения Adobe AIR замедляют отклик после простоя - PullRequest
5 голосов
/ 04 мая 2010

Я потратил сотни наших усилий на разработку приложения Adobe AIR с Flex 4.0, и теперь я подумал, что должен был закончить, но после того, как приложение продолжало работать более нескольких часов, отзывчивость пользовательского интерфейса начинает отсутствовать…

Что я делаю: Мое приложение использует пользовательские цвета, устанавливая backgroundImages с прозрачностью для BorderContainers в Window-модулях. Я открываю много разных всплывающих окон, все они основаны на Window-Class (не на TitleWindow!), Динамически создаются и закрываются в ActionScript. Используя Flex Profiler, я, конечно, знаю, что сборщик мусора корректно уничтожает все выделенные ресурсы, и потребление памяти не увеличивается с продолжительностью работы приложения. Далее профилировщик показывает мне, что ни один из моих методов не занимает много процессорного времени, так что это тоже должно быть хорошо.

Что действительно интересно: Если я постоянно взаимодействую с приложением (нажимает кнопки, пишет текст, ...), ничего не происходит, и все в порядке, НО, если я не взаимодействую с приложением в течение нескольких минут, а затем возвращаюсь - отзывчивость интерфейса действительно плохая!

Действительно плохо означает, что, если я наберу какой-нибудь текст в TextInput-Control, я могу наблюдать за написанием каждого отдельного письма с задержкой не менее 1 секунды!

Кто-нибудь сталкивался с подобной ситуацией, или кто-то, кто знает, в чем может быть проблема? Мое предложение заключается в том, что после некоторой активности время выполнения flash-player ограничивает использование процессором приложения AIR и не возвращает полную мощность, когда пользователь возвращается.

Я протестировал приложение с Flex 4.0, Flex 4.1, AIR 1.5, AIR 2.0 с Flash Player 9, а также с Flash Player 10, работающим в Windows XP и Windows 7 ...

1 Ответ

5 голосов
/ 05 мая 2010

Я наконец нашел решение!

Новые компоненты spark, представленные в Flex 4, добавили свойство под названием backgroundFramerate в класс WindowedApplication. По умолчанию это свойство имеет значение 1, что означает, что AIR автоматически регулирует частоту кадров, когда основное (!) Окно приложения становится неактивным. К сожалению, эта частота кадров используется для всего приложения, включая все другие экземпляры окна, которые могут быть на переднем плане и активными!

После отключения автоматического регулирования частоты кадров путем установки для свойства backgroundFramerate значения -1 все проблемы исчезли!

Хотя я знаю, что при создании новых оконных объектов для отображения всплывающих окон я считаю, что это ошибка в Flex 4, которая до сих пор не исправлена.

...