В чем разница между SurfaceView и TextureView, классическим вопросом на собеседовании по Android?
В чем разница между SurfaceView и TextureView, классическим вопросом на собеседовании по Android?

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

SurfaceView

эффект:

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

Функции:

  • По умолчанию в отдельном окне(Surface)Средняя ничья:SurfaceView Создайте отдельное окно через отдельный Surface Рисовать,Процесс рисования и разделение основной нити,Уменьшить отставание.
  • Меньшая задержка: за счет SurfaceView Использование независимой поверхности делает операцию рисования более плавной и эффективной, что подходит для сцен, требующих высокой частоты кадров.
  • Перевод, вращение не поддерживаются 等):SurfaceView Операции преобразования, такие как перемещение, масштабирование и вращение, не поддерживаются в отличие от обычных представлений, поскольку эти операции требуют фундаментальной перестановки независимых элементов. Surface

Сценарии использования:

  • видеоиграть
  • Высокая производительность рендеринга игровой графики
Язык кода:javascript
копировать
val surfaceView = findViewById<SurfaceView>(R.id.surfaceView)
val holder = surfaceView.holder

holder.addCallback(object : SurfaceHolder.Callback {
    override fun surfaceCreated(holder: SurfaceHolder) {
        // Начать рисовать
    }

    override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
        // Обрабатывать изменения
    }

    override fun surfaceDestroyed(holder: SurfaceHolder) {
        // хватит рисовать
    }
})

TextureView

эффект:

  • TextureView да Элемент управления, отображающий содержимое,Может выполнять сложные преобразования представления своего содержимого.,например масштабирование、Вращение и т. д.。TextureView Отрисованный контент обрабатывается как текстура в иерархии представлений.

Функции:

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

Сценарии использования:

  • видеоиграть Нужна трансформация спецэффектов(Например, повернуть、увеличить)
  • анимированный контент
  • Фотография、видео Предварительный просмотр кадра во время записи
Язык кода:javascript
копировать
val textureView = findViewById<TextureView>(R.id.textureView)
textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
    override fun onSurfaceTextureAvailable(surface: SurfaceTexture, width: Int, height: Int) {
        // Начать рисовать
    }

    override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture, width: Int, height: Int) {
        // Изменение размера ручки
    }

    override fun onSurfaceTextureDestroyed(surface: SurfaceTexture): Boolean {
        return true // Возврат true указывает, что SurfaceTexture будет выпущен.
    }

    override fun onSurfaceTextureUpdated(surface: SurfaceTexture) {
        // Обновить содержимое чертежа
    }
}

главное отличие

1. Различия в производительности:

  • SurfaceView воспользоваться независимым Surface Для рендеринга производительность выше, подходит для сцен с высокими требованиями к задержке и частоте кадров.
  • TextureView При обработке в виде текстуры в иерархии представлений производительность менее мощная, но обеспечивает большую гибкость в манипулировании представлениями.

2. Просмотр трансформации:

  • SurfaceView Общие операции преобразования вида (такие как вращение, масштабирование) не поддерживаются и могут трансформироваться только вместе со всей формой.
  • TextureView Поддерживает все операции преобразования представления, подходит для контента, требующего преобразования и анимации.

3. Как использовать:

  • SurfaceView нужно пройти SurfaceHolder Выполните управление чертежом.
  • TextureView проходить SurfaceTexture Выполнение управления является относительно простым и гибким.

4. Уровень просмотра:

  • SurfaceView Содержимое проникнет во всю иерархию представлений и может привести к тому, что другие элементы управления над ним станут невидимыми.
  • TextureView Содержимое можно накладывать и трансформировать в обычной иерархии представлений.

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

END

Зажгите [Нравится и смотрите] и пусть деньги и любовь текут к вам.

Если вы посадите цветы в своем сердце, ваша жизнь не будет бесплодной. Если вы тоже хотите расти вместе, нажмите и следуйте.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода