Переход с Titanium SDK с 7 на 8 поток приложений похож на фреймы - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение, которое работает на Titanium 7.5.1.GA

, когда я пытался обновить до 8.0.0.GA, приложение работает и работает на iOS

, но когда Навигация в приложении работает как фреймы ... (особенно если я открыл окно с большим количеством кода или дорогой обработкой данных или самозапускающим l oop .... ete c) ... пользовательский интерфейс зависает до выполнение кода выполняется, после чего все пользовательские интерфейсы отображаются как «POFF»

проблема теперь, когда я не знаю, что происходит .... и производительность работает на 100% на SDK 7.5.1.GA

Примечание: run-on-main-thread = false .... и я прочитал, что по умолчанию в SDK 8 принудительно установлено значение "true" .... но каково решение ..... мое приложение очень большой, что я должен делать? Должен ли я рефакторинг всех .... я не знаю так много о "запустить на главной нити" в титане.

1 Ответ

2 голосов
/ 13 января 2020

run-on-main-thread означает, что ваша бизнес-логика c будет работать в том же потоке, что и пользовательский интерфейс. Причина, по которой вы видите плохую производительность в SDK 8, заключается в том, что сейчас это единственный вариант. Так что обойти это невозможно.

Однако это только показывает, насколько плохо было оптимизировано ваше приложение и, вероятно, разряжено много батареи во время работы. Вам нужно оптимизировать рендеринг приложения и делать только те вещи, которые необходимы. Какой тип бизнес-логики c есть в вашем приложении, телефон так ужасно работает? Такое ощущение, что есть много вещей, которые могли бы быть лучше, и много вещей, которые можно упростить.

Пара вещей, которые вы можете сделать:

  • вкладки: отображать только видимая вкладка
  • разбиение на страницы: не отображать более 20-30 элементов в списке, добавить динамическую c нумерацию страниц и отображать только некоторые элементы
  • тяжелые вычисления: попробуйте избегайте их вообще или сохраняйте результаты, чтобы вы могли сделать это только один раз. В этом случае также может быть реализован рефакторинг, поскольку много раз вычисления в программировании могут выполняться несколькими способами, причем некоторые из них НАМНОГО ТЯЖЕЛЫЕ, чем другие более простые результаты.
  • избегают повторного рендеринга. Если вы добавляете элементы один за другим в список, а не все сразу, у вас есть гораздо более легкий интерфейс
  • , чтобы добавить к предыдущему пункту, если вы используете привязку данных Alloy, это повторная визуализация (по одному элементу за раз) экспоненциально плохо!

Есть еще много оптимизаций, которые вы можете сделать, чтобы сделать его лучше. Если вы запрограммируете это хорошо, вы не заметите никакой задержки. У меня были списки из 10.000 элементов, в которых каждый элемент нуждался в вычислениях (вычисление расстояния по широте / долготе, переформатирование заголовка и отображение момента js), и я все еще мог отобразить его в течение полсекунды. Конечно, потом я опустил его до примерно 100 пунктов, так как 10 000 в любом случае бесполезно.

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

...