Intereting Posts
Метод onCreateView вызывается, когда? И Сколько раз в жизненном цикле активности? Как установить радиус закругленного угла для рисования цвета с помощью xml? Android – addToBackStack () не работает? Сбой приложения при восстановлении с фона после долгого времени Android valgrind build не работает Jellybean / ICS Android HTTP Post Method + WebView.RestoreState Отправить сообщение с помощью Volley и получить в PHP Дифференциальные правила использования getBaseContext для Android, getApplicationContext или использования «этого» Android Build с Gradle и ProGuard: «Выходная банка должна быть указана после входной банки, или она будет пустой» Динамически меняет макет Загрузка только части растрового файла в Android Android Facebook SDK 3.0 дает «remote_app_id не соответствует сохраненному идентификатору» при входе в систему Лотские свойства и значения Kotlin сброшены: сбрасываемый ленивый делегат Безопасность отправки конфиденциальных намерений в моем собственном приложении? Как изменить Android Talkback в случае имени приложения

Разница между SurfaceView и View?

Когда это необходимо или лучше использовать SurfaceView вместо View ?

Solutions Collecting From Web of "Разница между SurfaceView и View?"

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

Поэтому, если вам нужно быстро обновлять графический интерфейс или если рендеринг занимает слишком много времени и влияет на пользовательский интерфейс, используйте SurfaceView .

Несколько вещей, которые я отметил:

  • SurfaceViews содержат хороший механизм рендеринга, который позволяет потокам обновлять содержимое поверхности без использования обработчика (хорошо для анимации).
  • Поверхности не могут быть прозрачными, они могут появляться только за другими элементами иерархии представлений.
  • Я обнаружил, что они намного быстрее для анимации, чем рендеринг на представлении.

Для получения дополнительной информации (и большого примера использования) обратитесь к проекту LunarLander в разделе примеров SDK.

Обновлено 05/09/2014

ОК. У нас есть официальный документ. Он говорил все, о чем я упомянул, в лучшем виде.


Подробнее читайте здесь .

Да, основное различие заключается в том, что surfaceView можно обновить в фоновом потоке. Тем не менее, вас больше беспокоит.

  • SurfaceView выделяет поверхностный буфер, в то время как все представления разделяют один буфер поверхности, который выделяется ViewRoot. Другим словом, surfaceView стоит больше ресурсов.

  • SurfaceView не может быть аппаратно ускорен (как JB4.2), в то время как 95% операций с обычным представлением ускоряются с использованием openGL ES.

  • Необходимо сделать больше работы, чтобы создать свой настраиваемый интерфейс surfaceView. Вам нужно прослушивать событие surfaceCreated / Destroy, создать поток рендеринга, что более важно, синхронизировать поток рендеринга и основной поток. Однако, чтобы настроить View, все, что вам нужно сделать, это переопределить метод onDraw .

  • Время для обновления отличается. Механизм обновления обычного вида ограничивает или контролирует структуру: вы вызываете view.invalidate в потоке пользовательского интерфейса или view.postInvalid в другом потоке, чтобы указать инфраструктуре, что представление должно быть обновлено. Тем не менее, представление не будет обновляться немедленно, но подождите, пока не появится следующее событие VSYNC. Легкий подход к пониманию VYSNC заключается в том, чтобы рассматривать его как таймер, который запускает каждые 16 мс для экрана 60 кадров в секунду. В Android все нормальное обновление (и отображение на самом деле, но я не буду говорить сегодня), синхронизируется с VSYNC для достижения лучшей гладкости. Теперь, вернемся к поверхностиView, вы можете визуализировать его в любое время по своему усмотрению. Однако я не могу сказать, является ли это преимуществом, поскольку дисплей также синхронизирован с VSNC, как указано ранее.

Основное отличие состоит в том, что SurfaceView может быть нарисован фоновыми адами, но Views не может. SurfaceViews используют больше ресурсов, хотя вы не хотите их использовать, если вам не нужно.

SurfaceView – это настраиваемый вид на Android, который можно использовать для рисования внутри него.

Основное различие между View и SurfaceView заключается в том, что представление создается в SurfaceView UI Thread , который используется для всего взаимодействия с пользователем.

Если вы хотите быстро обновить пользовательский интерфейс и отобразить в нем большой объем информации, SurfaceView – лучший выбор.

Но для SurfaceView есть несколько технических SurfaceView :

1. Они не аппаратные ускорены.

2. Нормальные представления отображаются при вызове методов invalidate или postInvalidate() , но это не означает, что представление будет немедленно обновлено ( VSYNC будет отправлен, и ОС решает, когда он будет обновлен. SurfaceView может быть немедленно обновлен ,

3. SurfaceView имеет выделенный surface buffer , поэтому он более дорогостоящий

Другое определение:

SurfaceView – это специальное представление, которое позволяет отображать контент непосредственно на экране.

Источник: The Big Nerd Ranch Guide

Одно из основных различий между представлением поверхности и представлением заключается в том, что для обновления экрана для обычного вида нам нужно вызвать метод invalidate из того же потока, где определено представление. Но даже если мы назовем недействительным, обновление не произойдет сразу. Это происходит только после следующего прихода сигнала VSYNC. Сигнал VSYNC – это сигнал, генерируемый ядром, который происходит каждые 16,6 мс, или это также известно как 60 кадров в секунду. Поэтому, если мы хотим больше контролировать обновление экрана (например, для очень быстрой анимации), мы не должны использовать обычный класс представления.

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

https://www.youtube.com/edit?o=U&video_id=kRqsoApOr9U

https://www.youtube.com/edit?o=U&video_id=Ji84HJ85FIQ

https://www.youtube.com/edit?o=U&video_id=U8igPoyrUf8