Що таке вікно Android?


76

Що таке WindowAndroid?

Я думав Activity, що називається найвищий рівень в Android , тобто екран, який ви бачите.

Хтось може сказати мені, що таке Вікно в Android? чи є у нас просто один або декілька з них.

Відповіді:


10

Діяльність - це те, що ви б назвали вікном.

Технічно кажучи, Діяльність створює для Вас Вікно.

Ви можете їх мати багато, але зазвичай не синхронно. Щоб попросити додаткової інформації, ви можете зателефонувати у діалогове вікно або активувати інтенцію.

Для отримання додаткової інформації відвідайте це посилання .


3
Існує Activity.getWindow (), тому window є частиною Activity.
Zon

Дякую Кноссу за цю інформативну та просту відповідь.
drakogemini2

Дякую також Zon за цю властивість діяльності.
drakogemini2

175

[ОНОВЛЕННЯ] (Дозвольте мені поділитися тим, про що я дізнався Windowпісля оригінальної відповіді)

В одному реченні A - це прямокутна область, яка має одну ієрархію подання . Кольорові прямокутники на зображенні нижче - це вікна.Window

введіть тут опис зображення

Як бачите, на одному екрані може бути кілька вікон, і WindowManager керує ними. Список вікон на поточному екрані можна отримати за допомогою Hierarchy Viewer , або adb shell dumpsys window.

Список вікон у прикладі засобу перегляду ієрархій: введіть тут опис зображення

(Нижче оригінальна відповідь)


У мене було таке саме запитання, і я сподіваюся, це могло б допомогти вам, хлопці.

Відповідно до документації розробника Android ,

"Кожній діяльності надається вікно, в якому можна намалювати свій користувальницький інтерфейс."

і, Дайанн Хакборн , яка є інженером фреймворків Android, дала тут деякі визначення . Вона сказала,

Вікно в основному схоже на те, що ви думаєте про вікно на робочому столі. Він має єдину Поверхня, на якій відображається вміст вікна. Додаток взаємодіє з менеджером вікон для створення вікон; Менеджер вікон створює поверхню для кожного вікна і передає її програмі для малювання. Додаток може намалювати в Surface все, що хоче; для Менеджера вікон це просто непрозорий прямокутник.

Поверхня - це об’єкт, що містить пікселі, які компонуються на екран . Кожне вікно, яке ви бачите на екрані (діалогове вікно, ваші повноекранні дії, рядок стану), має власну поверхню, на яку воно втягується, і Surface Flinger надає їх на кінцевий дисплей у правильному Z-порядку. Поверхня, як правило, має більше одного буфера (як правило, два) для виконання подвійного буферизованого рендерингу: додаток може малювати свій наступний стан інтерфейсу, поки поверхневий інструмент компонування екрану компонує останній буфер, не потрібно чекати закінчення програми малювання.

Вид - це інтерактивний елемент інтерфейсу всередині вікна. До вікна приєднана єдина ієрархія подання, яка забезпечує всю поведінку вікна. Кожного разу, коли вікно потрібно перемалювати (наприклад, через те, що подання зневажило себе), це робиться у Поверхні вікна . Поверхня заблокована, що повертає полотно, за допомогою якого можна намалювати. Обіг малювання виконується вниз по ієрархії, подаючи полотно вниз для кожного подання, щоб намалювати його частину інтерфейсу. Після цього Surface розблокується та розміщується, так що щойно намальований буфер поміняється на передній план, а потім буде компонований на екран Surface Flinger.

Крім того, я знайшов іншу інформацію з презентації Ромена Гая (Ви можете дивитись його виступ у групі користувачів Сан-Франциско для Android тут , а завантажувати цілі слайди тут )

введіть тут опис зображення

Отже, в двох словах:

  • An Activityмає вікно (в якому він малює свій користувальницький інтерфейс),
  • a Windowмає єдину Surfaceі єдину ієрархію подання,
  • Surfaceвключають , ViewGroupякий має види.

1
Дякую за блискучу відповідь та посилання. Чи може хтось сказати мені, де вміщується decorView, у цьому поясненні?
abhiank

Чи можете ви сказати мені, чому view.getLocationInWindow () повертає координату y так, що вона також містить висоту рядка стану. Рядок стану повинен бути в іншому вікні. Крім того, я перевірив, що вікно, про яке я говорю, є вікном діяльності.
Рохан Бхатія,

2
Залежно від теми вашої активності, прапорців системного інтерфейсу тощо, він може знаходитись під рядком стану (так що висота рядка стану не буде включена у вікно) або може сидіти за рядком стану (щоб ваша діяльність могла малювати за прозорим рядком стану, у цьому випадку висота рядка стану включається у вікно). Зокрема, якщо ви використовуєте власний колір рядка стану, тоді ви малюєте за рядком стану.
j__m

21

Я хотів би сказати коротко:

Application --->
  Activity --->
    Window Manager --->
      Window --->
        Surface ---> 
          Canvas --->
            View Root ---> 
              View Group --->
                View ---> 
                  Bitmap/Open GL panel ---> 
                    Current Surface Buffer ---> 
                      Surface Flinger --->
                        Screen

1
Дякую шановний Фінве за краще покращення форматування. Чесно кажучи, я абсолютно новачок у stackoverflow.
Мохаммед Юсер Савва

15

Android: Вікно, Поверхня, Полотно та Растрове зображення Ось дуже базовий і простий концептуальний огляд того, як відбувається взаємодія між вікном, поверхнею, полотном та растровим зображенням.


Відповідати верхній і нижній поверхням на діаграмі панелі стану та навігації?
Carlos Hernández Gil

Кожне вікно на екрані має поверхню. На екрані може бути кілька вікон. Так, панелі навігації та стану мають відповідні вікна та прикріплені поверхні. Наведений малюнок - лише зразок ілюстрації концепції.
Сабі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.