Відповіді:
Усі представлення зображуються на одній темі 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 (), спеціальною темою.
Таким чином: програма контролює терміни. Таким чином ми можемо відобразити наступне растрове зображення анімації.