2016-04-24 6 views
2

У меня есть реализация ListCell, как показано на рисунке ниже.Плохая производительность ListView на Gluon

enter image description here

Левая сторона, которая представляет собой дату, состоящую из 3-х этикеток, помещает в VBox и «CounterContent», состоящий из счетчика, с TextField для каждой цифры, содержащегося в HBox, и два Hboxes, содержащие этикетки для кВтч, кВт/ч и т. д. И это, кажется, слишком много, чтобы бегать по-настоящему.

Я попытался загрузить данные в фоновом задании, показывая индикатор прогресса, пока задача запущена, но в отличие от настольного компьютера, на Android-телефоне производительность очень плохая. Всякий раз, когда я переключаюсь на список, сборка мусора срабатывает и блокирует поток ui, так что индикатор прогресса никогда не появляется.

Я пробовал это на Huawei Y-300, Android 4.1.1, javafxports 8.60.6 (потому что javafxports 8.60.7 вызывает ошибку, что делает TextField непригодным), а также на Samsung S5 mini, Android 5 +. На телефоне Samsung производительность в целом намного лучше, как и ожидалось, из-за компиляции Ahead-of-Time, я думаю, но проблема с сборкой мусора по-прежнему остается. Кроме того, после того, как список был заполнен ячейками, прокрутка не очень гладкая.

Является ли список вопросов сложным или что еще может быть проблемой для плохой работы?

UPDATE:

После запуска много испытаний кажется негладкий скроллинг не вызван проблемами производительности. По крайней мере, на S5 (javafxports 8.60.7).

я удалил все CSS стилей и заменил текстовые поля по одной метке (счетчик узел уже пользовательский элемент управления (забыл об этом), который излагает текстовые поля в 2 Regions (не HBoxes) и узлы ListCell создаются в конструкторе). Кроме того, я переключил ListView на CharmListView и установил android.monocle.input.touchRadius = 1.

Ничто из этих шагов не привело к значительному улучшению.

Просто пояснить: В отличие от телефона Huawei, прокрутка на S5 и Android 5+ может быть использована, но это не очень гладко, что создает неудовлетворительную работу пользователя.

На Huawei (javafxports 8.60.6), изменяя поля для встречных текстовых полей для ярлыка, значительно улучшилось, но не до такой степени, что прокрутка стала пригодной для использования. Пока я не установил этот волшебный экспериментальный переключатель: gluon.experimental.performance = true, что делает список прокрутки молнии быстрым (после небольшой задержки разминки), но все же не очень гладким.

ответ

4

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

ListCell

Для начала, число узлов в клетке очень высока. Обратите внимание, что каждый отдельный прокрутка, который вы делаете, означает полный рендеринг виртуального потока, который содержит видимые ячейки. И для каждой ячейки это означает воссоздание своего контента снова и снова.

Без просмотра кода я не могу сказать, но вы должны избегать создания новых экземпляров каждого узла в ячейке все время, имея только один экземпляр, а в методе updateItem изменять содержимое узлов ,

Посмотрите на это sample. Класс NoteCell является пользовательской ячейкой, где используется ListTile.

Количество узлов

Вы пытались использовать только Label заменить 8 и текстовые поля 3 коробки?

Cache

Если вы используете изображения, загруженные из Интернета, используйте ГЛЮОНА Charm вниз Cache, чтобы избежать той же загрузки изображения снова и снова.

Посмотрите на это sample. Без кеша, даже на рабочем столе, производительность действительно затронута.

Также используйте встроенный кэш JavaFX для любого узла, используя разные стратегии кэширования.

CSS

Комплекс CSS требует много времени процессора. Попробуйте упростить его. Даже вы можете удалить весь CSS для быстрого теста. Затем решите, что вы можете или не можете использовать.

То же самое касается анимации: избегайте анимации, переходов или даже эффектов CSS, если это возможно.

пользовательского элемента управления узлом комплекс

счетчик, вероятно, может быть заменен на пользовательский элемент управления, который оптимизирует визуализацию.

CharmListView

Вы пробовали с помощью CharmListView управления Gluon Charm вместо ListView?

Существует новый экспериментальный флаг, который вы можете использовать для проверки возможной оптимизации, которая может повысить производительность при прокрутке списка. Установите gluon.experimental.performance=true в файл java.custom.properties и дайте ему попробовать.

JavaFXPorts версия

Вы упомянули вы используете 8.60.6 из-за TextField ошибки. В этом случае редактируются ваши TextField узлы? Если нет, я бы предложил заменить их другими узлами и работать с 8.60.7, так как он содержит много улучшений производительности.

инструментов Performance

инструменты использование производительность как Monitor и использовать его profiling варианты, так что вы можете отслеживать вниз любое возможное горлышко бутылки.

CPU

И последнее, но не менее важное: ваши данные для мобильных устройств всегда критичны.

Попытка оказать сложную сцену на Cortex A5, учитывая, что «это наименьшая, самая низкая цена и самая низкая мощность ARMv7-приложения processor», или с использованием очень старого Android 4.1.1, не может работать так же хорошо, как и запуская его на совершенно новом устройстве с более высокими характеристиками.

Как вы уже упоминали, работа на Cortex A7 выполняет «путь лучше». Посмотрите на это comparison и найдите нужную архитектуру для этой работы.

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

+0

Спасибо за подробную информацию! Я обновил свой вопрос с помощью шагов, которые я предпринял, для дальнейшего изучения проблемы. – jns

+0

Рад, что вы получаете некоторые улучшения. Пробовали ли вы приложение 2015 года Gluon [JavaOne] (https://play.google.com/store/apps/details?id=com.gluonhq.applications.javaone)? Он использует довольно эффективный элемент управления CharmListView, но без экспериментального флага. Проверьте, плавно ли прокрутка на ваших устройствах. –

+0

Просто попробовал, увидев те же самые «прыжки» во время прокрутки, поэтому реализация списка ячеек не вызывает такого эффекта, как я ожидал в начале. Прокрутка в Webview, например. супер гладкий. – jns

Смежные вопросы