Mitme aknaga Android N: mida peavad arendajad teadma, et sellest parimat ära kasutada

Anname ülevaate sellest, mida Android N eelseisev mitme akna tugi arendajatele tähendab ja kuidas sellest maksimumi võtta!

Mitme akna tugi on kena funktsioon, mida ootame Android N-s ja oleme juba pikka aega soovinud, et see oleks kõikides seadmetes saadaval. Kuid selleks, et see oleks nauditav kogemus, peavad arendajad selle õigeks toetamiseks oma rakendustes mõningaid muudatusi tegema.

Üks Google'i I/O seanssidest oli arendajatele mõeldud uute API-de ja süsteemi käitumismuutuste kohta, mida pakub mitme akna tugi.

Seansi esitles Wale Ogunwale, Android ActivityManageri tehniline juhtjuht ja WindowManageri raamistiku komponendid – tema ja tema meeskond vastutavad Androidi mitme akna eest.

Saate vaadata Mitme akna režiimi seanss YouTube'is, aga anname siin ka ülevaate seansist.

N tutvustab kolme erinevat mitme akna režiimi:
  • Jagatud ekraani režiim: see on vaikimisi saadaval olev režiim. Nagu nimigi ütleb, võimaldab see avada kaks rakendust kõrvuti.
  • Vabakujuline režiim: tootjad saavad seda lubada suuremates seadmetes, mis võimaldab kasutajatel lisaks jagatud ekraani režiimile tegevuste suurust vabalt muuta.
  • Pilt-pildis režiim: mõeldud Android TV seadmetele, see režiim on mõeldud videopleieritele, mis töötavad kinnitatud aknas, kui kasutaja suhtleb teiste rakendustega.
Android N jagatud ekraani režiimAndroid N PiP-režiim
See väärib märkimist. oleme varem käsitlenud N-i mitme akent ja pakkunud kriitikat praeguse süsteemi kohta. Seda silmas pidades loodame, et vabakujuline režiim liigub pilt-pildis režiimile veidi lähemale, kuna sellel oleks kasulikke rakendusi kõigis seadmetes.
Rakendustes mitme akna toe lubamine on lihtne: kui sihite juba N-d, ei pea te midagi tegema. Kui soovite mitme akna funktsiooni keelata, saate seda teha, määrates. android: resizeableActivity tegevuse atribuut teie manifestis. false. Seda tuleks teha ainult siis, kui see on tõesti õigustatud, kuna see muudab teie rakenduse alati halvasti silmapaistvaks täisekraanirežiimis käivitamine isegi siis, kui kasutaja (või mõni muu rakendus) proovib seda käivitada mitmes aknas režiimis. Oluline on märkida, et juurtegevuse atribuudid kehtivad kõikidele selle ülesandevirna kuuluvatele tegevustele. Teisisõnu, kui teil on tegevus, mida teised rakendused saavad käivitada, veenduge, et see toetaks mitme akna režiimi kuna te ei saa garanteerida, et teised rakendused käivitavad teie tegevuse uues ülesandes kasutades. Intent#FLAG_ACTIVITY_NEW_TASK Pilt-pildis režiimi tugi peab olema sõnaselgelt deklareeritud rakenduse kaudu. android: supportsPictureInPicture atribuut. Pange tähele, et seda atribuuti ignoreeritakse, kui. android: resizeableActivity on. false .Layout atribuute saab kasutada vabakujuliste akende vaikemõõtmete ja paigutuse määramiseks või minimaalse laiuse või kõrguse määramiseks nii vabakujuliste kui ka jagatud ekraani režiimide jaoks:
  • android: defaultWidth/android: defaultHeight: tegevuse vaikemõõtmed (vabakujuline režiim).
  • android: gravity: tegevuse algpositsioon (vabakujuline režiim).
  • android: minimalWidth/android: minimalHeight: tegevuse minimaalsed mõõtmed (vabakujuline ja jagatud ekraani režiim)
Koodinäite leiate siit. Google'i mitme akna mänguväljaku näidisrakendus GitHubis: AndroidManifest.xml.
Mitme akna toe kasutuselevõtuga peate võib-olla oma rakendustes mõnda asja üle kontrollima, et veenduda nende korrektses töös.

Tegevuse elutsükli mõistmine

The. tegevuse elutsükkel on mitme akna režiimis muutumatu: Android Activity Basic elutsükkel Sellegipoolest võivad mõned väikesed erinevused aktiivsusolekute vahel põhjustada tahtmatut käitumist, mida te tavaliselt enne N ei märkaks. Seda on oluline teada. Activity#onResume() ja. Activity#onPause() kutsutakse välja siis, kui teie rakendus fookuse saab või kaotab, kuid mitte tingimata siis, kui see hakkab nähtavaks muutuma või lõpetab selle. (Pidage meeles, et korraga võib fookuses olla ainult üks rakendus.) Rakenduste puhul, mis värskendavad sisu pidevalt (nt video taasesitus), tehke kindlasti sisu värskenduste käivitamine ja peatamine. Activity#onStart() ja. Activity#onStop() selle asemel. Ei tee seda näiteks videorakenduste puhul, tähendab, et taasesitus toimub ainult siis, kui rakendus on teravustatud, mis kaotab mitme akna režiimi eesmärgi. Ametlikul YouTube'i rakendusel oli sarnane probleem Android N Developer Preview esmakordsel käivitamisel.

Käitusaja muudatuste käsitlemine

Kui rakendus lülitatakse mitme akna režiimi, muutuvad mõned seadme konfiguratsioonid. Võite lubada oma tegevuse taaskäivitada (sel juhul. fragmentide säilitamine võib olla hea mõte, kui teie tegevus peab käivitamisel läbi viima intensiivse toimingu) või valige see. konfiguratsioonimuudatusi selgesõnaliselt käsitlema selle asemel. Mitme akna režiimi sisenemisel või sees võivad muutuda neli seadme konfiguratsiooni: screenSize, smallestScreenSize, screenLayout ja. orientation. Vaadake. Androidi arendajate dokumentatsioon iga atribuudi kohta lisateabe saamiseks, kuid pange tähele. orientation ei viita antud juhul enam seadme orientatsioonile. Selle asemel näitab see lihtsalt, kas teie tegevuse laius on suurem kui selle kõrgus (maastik) või mitte (portree).Manifestist saab teada, et teie tegevus käsitleb neid muudatusi.
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Pidage meeles, et see tähendab, et peate nende muudatustega tegelikult hakkama saama. Activity#onConfigurationChanged()vaateid käsitsi värskendades või mõnda ressurssi uuesti laadides.

Mitme akna režiimis keelatud funktsioonid

Teie tegevused ei mõjuta mitme akna režiimis teatud süsteemifunktsioone.
  • Olekuriba ja navigeerimisriba muudatused, nagu süsteemiribade hämardamine/peitmine või ümbritseva režiimi kasutamine, ei mõjuta. See on mõistlik, kuna teie tegevus hõlmab ainult osa ekraanist.
  • The android: screenOrientation tegevuse atribuudil pole ka mitme akna režiimis mingit mõju: kuna teie tegevuse suurust saab muuta, pole enam mõtet, et sellel oleks kindel orientatsioon.
Mitme akna sündmuste jaoks on lisatud uusi tagasihelistusi, samuti praeguse oleku päringu meetodeid.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): kutsutakse välja, kui tegevuse olek muutub täisekraanilt mitme akna olekuks ja vastupidi.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): kutsutakse välja, kui tegevuse olek muutub PIP-režiimiks/režiimist välja.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): tagastab, kas tegevus on mitme akna/pilt-pildis režiimis või mitte.
  • Activity#overlayWithDecorCaption(boolean overlay): vabakujuliste akende puhul saab seda meetodit kasutada pealkirja (akna lohistamiseks kasutatav riba) sisu katmiseks, selle asemel et seda alla suruda.
PS. Väljaarvatud. Activity#overlayWithDecorCaption(), pakub neid meetodeid ka. Fragment klass.

Toimingute käivitamine mitme akna režiimis

  • Activity#enterPictureInPictureMode() saab kasutada tegevuse pilt-pildis režiimi panemiseks. Pange tähele, et režiimis PiP toimingutest ei teavitata sisendsündmustest – kasutusest MediaSession#setMediaButtonReceiver() kui soovite selliseid üritusi korraldada. Kui olete huvitatud, vaadake kindlasti ka Androidi arendajate veebisaiti Pilt-pildis Android N-s.
  • Kui seade on jagatud ekraani režiimis, saate käsuga käskida süsteemil käivitada teie kõrval muu tegevuse Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT lipp. Lipul pole mõju, kui see pole jagatud ekraani režiimis.
  • Kui seade on vabakujulises režiimis, ActivityOptions#setLaunchBounds() saab kasutada uue tegevuse mõõtmete ja asukoha määramiseks ekraanil.
Koodinäidete saamiseks vaadake Multi-Window Playgroundi näidisrakendust: külgneva tegevuse näide, käivituspiiride näide.

Tõmba ja lase lahti

Kui pukseerimise tugi on olnud olemas alates Honeycombist, siis varem oli see võimalik ainult sama tegevuse raames. See on nüüd. toetatud mitmes aknas samuti. Selle rakendamine tundub olevat. enamjaolt sama mis enne, millel on mõned täiendused risttegevuseks pukseerimiseks:
  • View#startDragAndDrop()
    • Uus pseudonüüm View#startDrag().
    • Risttegevuste pukseerimise lubamiseks edastage uus lipp View#DRAG_FLAG_GLOBAL.
    • Kui peate andma adressaadi tegevusele URI-õigused, edastage uued lipud View#DRAG_FLAG_GLOBAL_URI_READ või View#DRAG_FLAG_GLOBAL_URI_WRITE, vastavalt vajadusele.
  • View#updateDragShadow()
    • Asendab parajasti poolelioleva lohistamistoimingu lohistamise varju. Saab helistada ainult rakendus, mis käivitas lohistamistoimingu.
  • View#cancelDragAndDrop()
    • Tühistab käimasoleva lohistamise. Saab helistada ainult rakendus, mis käivitas lohistamistoimingu.
  • Kontrollida, kas seade toetab vabakujulist või pilt-pildis režiimi, on võimalik läbi PackageManager#hasSystemFeature(), kasutades PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT ja PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE vastavalt.
  • The android: windowBackground atribuuti saab kasutada tausta joonistamisena, kui tegevuse suurust muudetakse ja selle renderdamine jääb maha. Kui android: windowBackground on seadmata, android: windowBackgroundFallback selle asemel kasutatakse. Vaadake näidet Multi-Window Playgroundi näidisrakendusest.
Wale pakkus välja mõned parimad tavad, et tagada teie kasutajatele parim võimalik kasutuskogemus.
  • Käepideme režiim muutub elegantselt:
    • Säilitage kasutajaliidese järjepidevus olenemata orientatsioonist. Ärge laske elementidel sujuvate üleminekute võimaldamiseks positsioone muuta.
    • Ülaltoodut laiendades, ära vaheta telefoni/tahvelarvuti paigutuste puhul väga erinevate paigutuste vahel. Selle asemel kohandage tahvelarvuti paigutust väiksemate suuruste jaoks järjepidevuse tagamiseks.
  • Veenduge, et teie tegevused sobiksid väikeste suurustega kõrval järgides materjalidisaini mustreid.
  • Kasutage FLAG_ACTIVITY_LAUNCH_ADJACENT kui on mõttekas teha jagatud ekraani režiimis nauditavam kogemus.
  • Teatage suuruse muutmise kokkusobimatust ainult siis, kui see on põhjendatud. Nagu me eespool arutasime, muudab see teie rakenduse muul viisil halvasti silma paista.
Wale lõpetas seansi, pakkudes täiendavaid kasulikke ressursse:
  • Mitme akna dokumentatsioon.
  • Materjali disaini juhised jagatud ekraani režiimi jaoks.
  • Mitme akna rakenduse näidis.