Відповіді:
Усі представлення зображуються на одній темі GUI, яка також використовується для взаємодії з користувачами.
Тож якщо вам потрібно швидко оновити графічний інтерфейс або якщо візуалізація займає занадто багато часу і впливає на користувацький досвід, тоді використовуйте SurfaceView
.
Я зазначив кілька речей:
Для отримання додаткової інформації (та великого прикладу використання) зверніться до проекту LunarLander в розділі прикладів SDK.
оновлено 09.09.2014
ГАРАЗД. Зараз у нас є офіційний документ. Це говорило все, що я згадав, кращим чином.
Детальніше читайте тут .
Так, головна відмінність полягає в тому, що поверхню ViewView можна оновити на фоновому потоці. Однак є більше, що може вас хвилювати.
surfaceView має виділений поверхневий буфер, в той час як увесь перегляд розділяє один поверхневий буфер, який виділяється ViewRoot. Іншим словом, surfaceView коштує більше ресурсів.
surfaceView не може бути прискорений апаратним забезпеченням (станом на JB4.2), тоді як 95% операцій у звичайному View прискорюються HW, використовуючи openGL ES.
Більше роботи потрібно зробити, щоб створити індивідуальний поверхневий погляд. Вам потрібно прослухати подію surfaceCreate / Destroy, створити нитку візуалізації, що ще важливіше, синхронізувати нитку візуалізації та основну нитку. Однак, щоб налаштувати Вигляд, все, що вам потрібно зробити, - це onDraw
метод переопределення .
view.invalidate
потік інтерфейсу або view.postInvalid
інший потік, щоб вказати рамці, що подання має бути оновлено. Однак перегляд не буде оновлюватися негайно, але зачекайте, поки надійде наступна подія VSYNC. Простий підхід для розуміння VSYNC полягає в тому, щоб вважати, що це таймер, який запускається кожні 16 мс для екрана з 60 кадрів в секунду. В Android все звичайне оновлення перегляду (а відображення насправді, але я не говорю це сьогодні) синхронізується з VSYNC для досягнення кращої плавності. Тепер, повернувшись до поверхніView, ви можете візуалізувати його будь-коли за своїм бажанням. Однак я навряд чи можу сказати, чи є це перевагою, оскільки дисплей також синхронізований з VSYNC, як зазначено раніше.Основна відмінність полягає в тому, що SurfaceView
їх можна намалювати на фонових шаблонах, але Views
не можна.
SurfaceViews
використовуйте більше ресурсів, хоча тому ви не хочете використовувати їх, якщо не доведеться.
A SurfaceView
- це спеціальний вид в Android, який можна використовувати для малювання всередині нього.
Основна відмінність між a View
і a SurfaceView
полягає в тому, що View зображується в
UI Thread
, який використовується для всієї взаємодії з користувачем.
Якщо ви хочете оновити інтерфейс користувача досить швидко і надати в ньому багато інформації, SurfaceView - кращий вибір.
Але є кілька технічних нутрощів SurfaceView
:
1. Вони не апаратні прискорені.
2. Нормальні представлення відображаються під час виклику методів invalidate
або postInvalidate()
, але це не означає, що представлення буде негайно оновлено (A VSYNC
буде надіслано, а ОС вирішить, коли він буде оновлений. SurfaceView
Можна негайно оновити.
3. SurfaceView має виділений surface buffer
, тому це дорожче
Однією з головних відмінностей між поверхневим переглядом і переглядом є те, що для оновлення екрана для нормального перегляду нам потрібно викликати метод недійсного з тієї ж нитки, де визначено подання. Але навіть якщо ми називаємо недійсним, оновлення відбувається не відразу. Це відбувається лише після наступного надходження сигналу VSYNC. Сигнал VSYNC - це сигнал, генерований ядром, який відбувається кожні 16,6 мс, або це також відомий як 60 кадрів в секунду. Отже, якщо ми хочемо більше контролювати оновлення екрана (наприклад, дуже швидко рухається анімація), ми не повинні використовувати звичайний клас перегляду.
З іншого боку, у випадку поверхневого перегляду ми можемо оновити екран так швидко, як хочемо, і можемо це зробити з фонової нитки. Тож оновлення поверхневого перегляду дійсно не залежить від VSYNC, і це дуже корисно, якщо ми хочемо робити швидку анімацію. У мене є кілька навчальних відеороликів та приклад прикладу, які добре пояснюють усі ці речі. Перегляньте наступні навчальні відео.
Навіщо використовувати SurfaceView, а не класичний клас View ...
Однією з головних причин є те, що SurfaceView може швидко виводити екран.
Простими словами, SV більше здатний керувати анімацією синхронізації та візуалізації.
Щоб краще зрозуміти, що таке SurfaceView, ми повинні порівняти його з класом View.
Яка різниця ... перевірте це просте пояснення у відео
https://m.youtube.com/watch?feature=youtu.be&v=eltlqsHSG30
Добре із представленням у нас є одна головна проблема .... терміни надання анімації.
Зазвичай onDraw () викликається з системи запуску Android.
Отже, коли система запуску Android запускає функцію onDraw (), програма не може контролювати
час відображення, і це важливо для анімації. У нас є розрив у термінах
між додатком (нашою грою) та системою запуску Android.
SV, який він може викликати onDraw (), спеціальною темою.
Таким чином: програма контролює терміни. Таким чином ми можемо відобразити наступне растрове зображення анімації.