Наложение системы Android на canvas или GLSurfaceView выполняется чрезвычайно медленно

#android #canvas #transparency #overlay #glsurfaceview

#Android #canvas #прозрачность #наложение #glsurfaceview

Вопрос:

Я хочу реализовать что-то нестандартное в Android.

Я создал прозрачное системное наложение ( WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY ) поверх всего с помощью GLSurfaceView (затем я изменил его на canvas) и пытаюсь что-то нарисовать на нем.

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

Несколько фактов и наблюдений:

  • Мой вид наложения — полноэкранный
  • Система становится медленной, даже если я ничего не рисую для наложения
  • Мой Acer Iconia tab (10 «) запускает его намного медленнее, чем мой Droid X (больше пикселей для смешивания? Или новый конвейер рендеринга?)
  • Если я использую статическое изображение ImageView с прозрачным PNG, Android смешивает его без проблем. Почему? Проверяет ли Android, что нужно смешивать в каждом кадре?
  • Включение аппаратного ускорения на планшете не имеет эффекта

Мой вопрос: Возможно ли это как-то оптимизировать? Я установил фоновое значение моего представления равным null, но это не имело никакого эффекта.

Будет ли Android 4.0 таким же медленным, как 3.2?

Это особенно медленно, когда накладывается системное наложение на начальный экран. Почему?

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

Комментарии:

1. Что-то подсказывает мне, что Android 4.0 ICS ничуть не лучше. Проблема заключается не в наложении или GLSurfaceView, а в комбинации. Тем более, что вам требуется прозрачность, использование памяти будет довольно высоким. Добавление ускорения HW только увеличит использование памяти. Теперь попробуйте это на Galaxy Nexus 1280 x 720, вы просто нажимаете слишком много пикселей.