Viac okien v systéme Android N: Čo potrebujú vývojári vedieť, aby to čo najlepšie využili

Poskytujeme prehľad toho, čo pre vývojárov znamená nadchádzajúca podpora viacerých okien v systéme Android N a ako z nej vyťažiť maximum!

Podpora viacerých okien je pekná funkcia, na ktorú čakáme v systéme Android N a taký, ktorý sme už dlho chceli mať k dispozícii na všetkých zariadeniach. Aby to bol príjemný zážitok, vývojári možno budú musieť vo svojich aplikáciách vykonať nejaké zmeny, aby ich správne podporovali.

Jedna z relácií Google I/O bola určená pre vývojárov, aby sa dozvedeli o nových rozhraniach API a zmenách v správaní systému, ktoré prináša podpora viacerých okien.

Stretnutie prezentoval Wale Ogunwale, technický vedúci manažér pre Android ActivityManager a Komponenty rámca WindowManager -- on a jeho tím sú zodpovední za viac okien v systéme Android.

Môžete sledovať Relácia v režime viacerých okien na YouTube, ale prinášame tu aj prehľad relácie.

N predstavuje tri rôzne režimy viacerých okien:
  • Režim rozdelenej obrazovky: toto je režim, ktorý je predvolene dostupný. Ako už názov napovedá, umožňuje vám otvárať dve aplikácie vedľa seba.
  • Voľný režim: výrobcovia to môžu povoliť na väčších zariadeniach, čo používateľom okrem režimu rozdelenej obrazovky umožňuje ľubovoľne meniť veľkosť aktivít.
  • Režim obraz v obraze: Tento režim zameraný na zariadenia Android TV je určený pre prehrávače videa na spustenie v pripnutom okne, zatiaľ čo používateľ interaguje s inými aplikáciami.
Režim rozdelenej obrazovky Android NRežim Android N PiP
Stojí za zmienku, že. už sme sa venovali viacerým oknám na N a ponúkli sme určitú kritiku súčasného systému. S ohľadom na to dúfame, že režim voľného tvaru sa trochu priblíži k režimu obrazu v obraze, pretože by to malo užitočné aplikácie na všetkých zariadeniach.
Povolenie podpory viacerých okien vo vašich aplikáciách je jednoduché: ak už zacieľujete na N, nemusíte robiť nič. Ak sa rozhodnete zakázať viac okien, môžete to urobiť nastavením. android: resizeableActivity atribút aktivity vo vašom manifeste. false. Toto by sa malo robiť iba vtedy, ak je to skutočne opodstatnené, pretože vaša aplikácia vždy vyniká zlým spôsobom spustenie v režime celej obrazovky, aj keď sa ho používateľ (alebo iná aplikácia) pokúsi spustiť vo viacerých oknách režim. Je dôležité poznamenať, že atribúty koreňovej aktivity sa vzťahujú na všetky aktivity v rámci jej zásobníka úloh. Inými slovami, ak máte aktivitu, ktorú môžu spustiť iné aplikácie, uistite sa, že podporuje režim viacerých okien pretože nemôžete zaručiť, že iné aplikácie spustia vašu aktivitu v novej úlohe pomocou. Intent#FLAG_ACTIVITY_NEW_TASK Podpora režimu obraz v obraze musí byť explicitne deklarovaná prostredníctvom. android: supportsPictureInPicture atribút. Všimnite si, že tento atribút sa ignoruje, ak. android: resizeableActivity je. false Atribúty rozloženia možno použiť na nastavenie predvolených rozmerov a umiestnenia pre okná voľného tvaru alebo na určenie minimálnej šírky alebo výšky pre režimy voľného tvaru a rozdelenej obrazovky:
  • android: defaultWidth/android: defaultHeight: predvolené rozmery aktivity (režim voľného tvaru).
  • android: gravity: počiatočná poloha aktivity (režim voľného tvaru).
  • android: minimalWidth/android: minimalHeight: minimálne rozmery aktivity (režimy voľného tvaru a rozdelenej obrazovky)
Príklad kódu nájdete v. Vzorová aplikácia Multi-Window Playground od Google na GitHub: AndroidManifest.xml.
So zavedením podpory viacerých okien možno budete musieť znova skontrolovať niekoľko vecí vo svojich aplikáciách, aby ste sa uistili, že fungujú správne.

Pochopenie životného cyklu aktivity

The. životný cyklus činnosti sa nemení v režime viacerých okien: Základný životný cyklus aktivity Android Ako už bolo povedané, niektoré jemné rozdiely medzi stavmi aktivity môžu viesť k neúmyselnému správaniu, ktoré by ste si bežne pred N nevšimli. Je dôležité to vedieť. Activity#onResume() a. Activity#onPause() sú volané, keď vaša aplikácia získa alebo stratí zameranie, ale nie nevyhnutne, keď sa spustí alebo prestane byť viditeľná. (Pamätajte, že v danom čase môže byť zameraná iba jedna aplikácia.)V prípade aplikácií, ktoré neustále aktualizujú obsah (napr. prehrávanie videa), zaistite, aby ste spúšťali a zastavovali aktualizácie obsahu v. Activity#onStart() a. Activity#onStop() namiesto toho. Nerobí to napríklad video aplikácie, znamená, že prehrávanie sa uskutoční iba vtedy, ak je aplikácia zameraná, čo marí účel režimu viacerých okien. Oficiálna aplikácia YouTube mala podobný problém, keď sa prvýkrát spustila ukážka vývojára Android N.

Spracovanie zmien runtime

Keď sa aplikácia prepne do režimu viacerých okien, niektoré konfigurácie zariadenia sa zmenia. Môžete buď povoliť reštartovanie vašej aktivity (v takom prípade. zadržiavanie fragmentov môže byť dobrý nápad, ak vaša činnosť musí pri spustení vykonávať intenzívnu operáciu), alebo si to vyberte. spracovať zmeny konfigurácie explicitne namiesto toho. Pri vstupe do režimu viacerých okien alebo v ňom sa môžu zmeniť štyri konfigurácie zariadenia: screenSize, smallestScreenSize, screenLayout a. orientation. Pozrite si. Dokumentácia pre Android Developers pre viac informácií o každom atribúte, ale všimnite si to. orientation v tomto prípade sa už nevzťahuje na orientáciu zariadenia. Namiesto toho iba uvádza, či je šírka vašej aktivity väčšia ako jej výška (na šírku) resp nie (na výšku). Vyhlásenie, že vaša aktivita zvládne tieto zmeny, je možné vykonať z manifestu:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Majte na pamäti, že to znamená, že tieto zmeny budete skutočne musieť zvládnuť. Activity#onConfigurationChanged()manuálnou aktualizáciou zobrazení alebo opätovným načítaním niektorých zdrojov.

Zakázané funkcie v režime viacerých okien

Niektoré funkcie systému nebudú ovplyvnené vašimi aktivitami v režime viacerých okien:
  • Zmeny v stavovom riadku a navigačnom paneli, ako je stlmenie/skrytie systémových pruhov alebo použitie ponorného režimu, nebudú mať žiadny vplyv. To dáva zmysel, pretože vaša aktivita zaberá iba časť obrazovky.
  • The android: screenOrientation Atribút aktivity tiež nemá žiadny vplyv v režime viacerých okien: keďže veľkosť vašej aktivity bude možné meniť, už nemá zmysel, aby mala pevnú orientáciu.
Boli pridané nové spätné volania pre udalosti s viacerými oknami, ako aj metódy na dopytovanie aktuálneho stavu.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): volá sa, keď sa stav aktivity zmení z celej obrazovky na viac okien a naopak.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): volá sa, keď sa stav aktivity zmení do/z režimu PIP.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): vráti, či je aktivita v režime viacerých okien/obraz v obraze alebo nie.
  • Activity#overlayWithDecorCaption(boolean overlay): pre okná s voľným tvarom možno túto metódu použiť na to, aby titulok (lišta používaná na presúvanie okna) prekrýval obsah namiesto toho, aby ho stláčal nadol.
PS. Okrem. Activity#overlayWithDecorCaption(), tieto metódy poskytuje aj. Fragment trieda.

Spustenie aktivít v režime viacerých okien

  • Activity#enterPictureInPictureMode() možno použiť na uvedenie aktivity do režimu obraz v obraze. Upozorňujeme, že aktivity v režime PiP nedostávajú upozornenia na vstupné udalosti - použite MediaSession#setMediaButtonReceiver() ak chcete zvládnuť takéto udalosti. Ak vás to zaujíma, nezabudnite sa pozrieť aj na webovú stránku Android Developers Obraz v obraze v systéme Android N.
  • Ak je zariadenie v režime rozdelenej obrazovky, môžete systému povedať, aby spustil ďalšiu aktivitu vedľa vašej pomocou tlačidla Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT vlajka. Vlajka nemá žiadny účinok, ak nie je v režime rozdelenej obrazovky.
  • Ak je zariadenie v režime voľného tvaru, ActivityOptions#setLaunchBounds() možno použiť na určenie rozmerov a umiestnenia novej aktivity na obrazovke.
Príklady kódu nájdete vo vzorovej aplikácii Multi-Window Playground: príklad susednej aktivity, príklad spustenia hraníc.

Drag and Drop

Zatiaľ čo podpora drag and drop existuje už od Honeycombu, predtým to bolo možné len v rámci rovnakej aktivity. Sneží. podporované vo viacerých oknách tiež. Zdá sa, že implementácia tohto. väčšinou to isté ako predtýms niekoľkými doplnkami pre presúvanie medzi aktivitami:
  • View#startDragAndDrop()
    • Nový alias pre View#startDrag().
    • Ak chcete povoliť presúvanie medzi aktivitami, odovzdajte nový príznak View#DRAG_FLAG_GLOBAL.
    • Ak potrebujete udeliť povolenia URI aktivite príjemcu, odovzdajte nové príznaky View#DRAG_FLAG_GLOBAL_URI_READ alebo View#DRAG_FLAG_GLOBAL_URI_WRITE, podľa potreby.
  • View#updateDragShadow()
    • Nahradí tieň ťahania pri práve prebiehajúcej operácii ťahania. Môže byť vyvolaný iba aplikáciou, ktorá vyvolala operáciu presunutia.
  • View#cancelDragAndDrop()
    • Zruší práve prebiehajúcu operáciu ťahania. Môže byť vyvolaný iba aplikáciou, ktorá vyvolala operáciu presunutia.
  • Kontrola, či zariadenie podporuje režimy voľného tvaru alebo obrazu v obraze, je možné prostredníctvom PackageManager#hasSystemFeature(), použitím PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT a PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE resp.
  • The android: windowBackground Ak sa veľkosť aktivity mení a jej vykresľovanie zaostáva, možno použiť ako vykresľovateľné pozadie. Ak android: windowBackground je nenastavený, android: windowBackgroundFallback sa používa namiesto toho. Príklad nájdete vo vzorovej aplikácii Multi-Window Playground.
Wale ponúkol niekoľko osvedčených postupov, aby sa zabezpečilo, že vaši používatelia budú mať najlepší možný zážitok:
  • Režim rukoväte sa elegantne mení:
    • Udržujte konzistentnosť používateľského rozhrania bez ohľadu na orientáciu. Nenechajte prvky meniť pozície, aby umožnili plynulé prechody.
    • Rozširujúc vyššie uvedené, neprepínajte medzi veľmi odlišnými rozloženiami pre rozloženia telefónu/tabletu. Namiesto toho prispôsobte rozloženie tabletu menším veľkostiam kvôli konzistencii.
  • Uistite sa, že sa vaše aktivity prispôsobujú malým rozmerom podľa podľa vzorov Material Design.
  • Použite FLAG_ACTIVITY_LAUNCH_ADJACENT keď má zmysel zabezpečiť príjemnejší zážitok v režime rozdelenej obrazovky.
  • Nekompatibilitu zmeny veľkosti deklarujte len vtedy, keď je to opodstatnené. Ako sme diskutovali vyššie, inak vaša aplikácia vyniká zlým spôsobom.
Wale ukončil reláciu tým, že ponúkol niekoľko ďalších užitočných zdrojov:
  • Dokumentácia s viacerými oknami.
  • Pokyny pre Material Design pre režim rozdelenej obrazovky.
  • Vzorová aplikácia pre viac okien.