Intereting Posts
Ошибка Gradle после обновления до версии Android Studio 2.0 и использования Instant Run: Создайте файл с возможностью рисования Если андроид перезапустит службу, снова вызовет onCreate? AudioTrack: play () вызван неинициализированным AudioTrack Как вы остановите ADT Logcat View из автоматического появления в Eclipse? Приемник как внутренний класс в Android Android: ShareActionProvider без истории Android: Поверните анимацию, верните ее в реальное состояние после окончания анимации? Как использовать типы сборки (debug vs release) для установки разных стилей и имен приложений? Android – доступ к локальному хосту из браузера без подключения к Интернету PreferenceActivity дает исключение NullPointerException, когда опция выбрана из списка ListPreference Не удалось открыть avd_name.avd / cache.img HttpURLConnection.getResponseCode () возвращает -1 при втором вызове Android dataBinding – как использовать ресурс bool, чтобы вызвать видимость компоновки Уведомление Android от BroadcastReceiver

Некоторые устройства Android очень медленны при рендеринге элементов холста

Я разрабатываю приложение для устройств Android и обнаружил, что Samsung Galaxy S4 специально имеет чрезвычайно низкую производительность, когда приложение / веб-страница использует холст. Странно, что это не всегда так.

Я тестировал 2 примера приложений.

http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html

а также

http://ie.microsoft.com/testdrive/Graphics/TouchEffects/Default.html

Первый работает отлично, и превосходит мою Nokia (которая является двухъядерной) и ожидается. Однако другая демонстрация почти полностью не реагирует, а частота кадров близка к 1, где, как и все другие устройства, это отлично.

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

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

Есть ли способ решить проблему с холстом на Samsung S4 … и, возможно, другие устройства Android с 4.2.x. Если у пользователей StackOverflow есть S4, можете ли вы протестировать обе демоверсии и подтвердить мои наблюдения?

Solutions Collecting From Web of "Некоторые устройства Android очень медленны при рендеринге элементов холста"

Я сильно подозреваю, что это не проблема с Canvas, а проблема requestAnimationFrame . Первая анимация не пытается использовать requestAnimationFrame , но вторая делает в этом файле в line 206 .

Android Browser на прошивках <= 4.2 не поддерживает requestAnimationFrame и вместо этого использует setTimeout , делящий одну секунду на заданную частоту кадров в Гц, которая выполняет рендеринг в обычном цикле событий.

setTimeout не выполняется в точечное время в запрошенных миллисекундах, но завершает событие в цикле в указанное время. Если цикл события зависает на другом javascript на странице, или одноядерное устройство решает, что что-то еще более важно, среда выполнения очень уязвима для де-приоритезации без API requestAnimationFrame , а обратные вызовы, запущенные с помощью setTimeout будут заикаться и сжиматься , Подробнее о разрешении и времени установки setTimeout .

К сожалению, вы находитесь во власти очереди событий, если вы находитесь (1), используя этот подход на основе Canvas и (2) на платформе, которая не поддерживает requestAnimationFrame . Вот справочная таблица для того, какие браузеры поддерживают эту функцию.

Ура!