Več oken v sistemu Android N: Kaj morajo razvijalci vedeti, da ga kar najbolje izkoristijo

Ponujamo pregled tega, kaj prihajajoča podpora za več oken v sistemu Android N pomeni za razvijalce in kako to kar najbolje izkoristiti!

Podpora za več oken je odlična funkcija, ki jo čakamo v sistemu Android N in že dolgo želimo, da bi bil na voljo na vseh napravah. Da bi bilo to prijetna izkušnja, bodo morali razvijalci morda narediti nekaj sprememb v svojih aplikacijah, da jo bodo pravilno podpirali.

Ena od sej Google I/O je bila namenjena razvijalcem, da bi se seznanili z novimi API-ji in sistemskimi vedenjskimi spremembami, ki jih prinaša podpora za več oken.

Sejo sta predstavila Wale Ogunwale, vodilni tehnični vodja za Android ActivityManager in Komponente ogrodja WindowManager -- on in njegova ekipa sta odgovorna za več oken v sistemu Android.

Lahko gledate Seja načina več oken v YouTubu, vendar tukaj ponujamo tudi pregled seje.

N uvaja tri različne načine več oken:
  • Način razdeljenega zaslona: to je način, ki je privzeto na voljo. Kot pove že ime, omogoča odpiranje dveh aplikacij eno ob drugi.
  • Način proste oblike: proizvajalci lahko to omogočijo na večjih napravah, kar uporabnikom omogoča prosto spreminjanje velikosti dejavnosti poleg načina razdeljenega zaslona.
  • Način slika v sliki: namenjen napravam Android TV, ta način je namenjen video predvajalnikom, ki se izvajajo v pripetem oknu, medtem ko uporabnik komunicira z drugimi aplikacijami.
Način razdeljenega zaslona Android NAndroid N PiP način
Omeniti velja, da. že smo obravnavali več oken na N in ponudili nekaj kritik trenutnega sistema. S tem v mislih upamo, da se bo način proste oblike nekoliko približal načinu slike v sliki, saj bi imel uporabne aplikacije na vseh napravah.
Omogočanje podpore za več oken v vaših aplikacijah je preprosto: ni vam treba storiti ničesar, če že ciljate na N. Če se odločite onemogočiti več oken, lahko to storite tako, da nastavite. android: resizeableActivity atribut dejavnosti v vašem manifestu. false. To storite le, če je resnično upravičeno, saj zaradi tega vaša aplikacija vedno izstopa na slab način zagon v celozaslonskem načinu, tudi če ga uporabnik (ali druga aplikacija) poskuša zagnati v več oknih način. Pomembno je vedeti, da atributi korenske dejavnosti veljajo za vse dejavnosti znotraj njenega sklada opravil. Z drugimi besedami, če imate dejavnost, ki jo lahko zaženejo druge aplikacije, se prepričajte, da podpira način več oken saj ne morete zagotoviti, da bodo druge aplikacije sprožile vašo dejavnost v novem opravilu z uporabo. Intent#FLAG_ACTIVITY_NEW_TASK .Podpora za način slike v sliki mora biti izrecno deklarirana prek. android: supportsPictureInPicture atribut. Upoštevajte, da je ta atribut prezrt, če. android: resizeableActivity je. false Atribute .Layout je mogoče uporabiti za nastavitev privzetih dimenzij in postavitev za okna poljubne oblike ali za določitev minimalne širine ali višine za načina poljubne oblike in načina deljenega zaslona:
  • android: defaultWidth/android: defaultHeight: privzete dimenzije dejavnosti (način proste oblike).
  • android: gravity: začetni položaj dejavnosti (način proste oblike).
  • android: minimalWidth/android: minimalHeight: minimalne razsežnosti dejavnosti (načina proste oblike in deljenega zaslona)
Primer kode najdete v. Googlova vzorčna aplikacija Multi-Window Playground na GitHubu: AndroidManifest.xml.
Z uvedbo podpore za več oken boste morda morali dvakrat preveriti nekaj stvari v svojih aplikacijah, da se prepričate, ali delujejo pravilno.

Razumevanje življenjskega cikla dejavnosti

The. življenjski cikel dejavnosti je nespremenjen v načinu več oken: Osnovni življenjski cikel dejavnosti Android Kljub temu lahko nekatere subtilne razlike med stanji dejavnosti povzročijo nenamerno vedenje, ki ga običajno ne bi opazili pred N. To je pomembno vedeti. Activity#onResume() in. Activity#onPause() kličejo se, ko vaša aplikacija pridobi ali izgubi fokus, vendar ne nujno, ko se začne ali preneha biti vidna. (Ne pozabite, da ima lahko samo ena aplikacija v danem trenutku fokus.) Pri aplikacijah, ki nenehno posodabljajo vsebino (npr. predvajanje videa), se prepričajte, da upravljate zagon in zaustavitev posodobitev vsebine. Activity#onStart() in. Activity#onStop() namesto tega. Tega ne storite na primer za video aplikacije, pomeni, da bo predvajanje potekalo samo, če je aplikacija fokusirana, kar izpodbija namen načina z več okni. Uradna aplikacija YouTube je imela podobno težavo, ko je bil prvič zagnan Android N Developer Preview.

Ravnanje s spremembami izvajalnega okolja

Ko je aplikacija prestavljena v način z več okni, se nekatere konfiguracije naprave spremenijo. Lahko dovolite, da se vaša dejavnost znova zažene (v tem primeru. zadrževanje fragmentov je morda dobra ideja, če mora vaša dejavnost izvajati intenzivno operacijo ob zagonu), ali pa se odločite za to. izrecno obravnavati spremembe konfiguracije namesto tega. Štiri konfiguracije naprave se lahko spremenijo ob vstopu v način več oken ali v njem: screenSize, smallestScreenSize, screenLayout in. orientation. Glejte na. Dokumentacija razvijalcev za Android za več informacij o vsakem atributu, vendar upoštevajte, da. orientation se v tem primeru ne nanaša več na usmerjenost naprave. Namesto tega le nakazuje, ali je širina vaše dejavnosti večja od njene višine (ležeče) oz ne (pokončno). Izjavo, da bo vaša dejavnost obravnavala te spremembe, lahko storite v manifestu:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Upoštevajte, da to pomeni, da boste te spremembe dejansko morali obravnavati. Activity#onConfigurationChanged(), z ročnim posodabljanjem pogledov ali ponovnim nalaganjem nekaterih virov.

Onemogočene funkcije v večokenskem načinu

Vaše dejavnosti v načinu z več okni ne bodo vplivale na nekatere sistemske funkcije:
  • Spremembe vrstice stanja in navigacijske vrstice, kot je zatemnitev/skrivanje sistemskih vrstic ali uporaba poglobljenega načina, ne bodo imele nobenega učinka. To je smiselno, saj vaša dejavnost zavzema le del zaslona.
  • The android: screenOrientation atribut dejavnosti tudi nima učinka v načinu z več okni: ker bo vaši dejavnosti mogoče spreminjati velikost, ni več smiselno, da ima fiksno usmerjenost.
Dodani so bili novi povratni klici za dogodke z več okni, pa tudi metode za poizvedovanje trenutnega stanja.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): kliče se, ko se stanje dejavnosti spremeni iz celozaslonskega v večokensko in obratno.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): kliče se, ko se stanje dejavnosti spremeni v/iz načina PIP.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): vrne, ali je dejavnost v načinu več oken/slika v sliki ali ne.
  • Activity#overlayWithDecorCaption(boolean overlay): za okna proste oblike lahko to metodo uporabite, da napis (vrstica, ki se uporablja za vlečenje okna) prekriva vsebino, namesto da bi jo potisnili navzdol.
PS. Razen. Activity#overlayWithDecorCaption(), te metode ponuja tudi. Fragment razred.

Zagon dejavnosti v večokenskem načinu

  • Activity#enterPictureInPictureMode() lahko uporabite za prestavitev dejavnosti v način slike v sliki. Upoštevajte, da dejavnosti v načinu PiP niso obveščene o dogodkih vnosa -- uporabite MediaSession#setMediaButtonReceiver() če želite obvladati takšne dogodke. Preverite tudi spletno stran razvijalcev za Android, če vas zanima Slika v sliki v sistemu Android N.
  • Če je naprava v načinu razdeljenega zaslona, ​​lahko sistemu naročite, naj zažene drugo dejavnost poleg vaše, tako da uporabite Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT zastava. Zastavica nima učinka, če ni v načinu deljenega zaslona.
  • Če je naprava v načinu proste oblike, ActivityOptions#setLaunchBounds() lahko uporabite za določitev dimenzij in lokacije nove dejavnosti na zaslonu.
Za primere kode si oglejte vzorčno aplikacijo Multi-Window Playground: primer sosednje dejavnosti, primer zagonskih meja.

Povleci in spusti

Medtem ko podpora za povleci in spusti obstaja že od Honeycomba, je bila prej mogoča le znotraj iste dejavnosti. Zdaj je. podprto v več oknih prav tako. Zdi se, da je izvajanje tega. večinoma enako kot prej, z nekaj dodatki za povleci in spusti med dejavnostmi:
  • View#startDragAndDrop()
    • Nov vzdevek za View#startDrag().
    • Če želite omogočiti povleci in spusti med dejavnostmi, posredujte novo zastavico View#DRAG_FLAG_GLOBAL.
    • Če morate dati dovoljenja URI za dejavnost prejemnika, posredujte nove zastavice View#DRAG_FLAG_GLOBAL_URI_READ oz View#DRAG_FLAG_GLOBAL_URI_WRITE, kot je primerno.
  • View#updateDragShadow()
    • Zamenja senco vlečenja za operacijo vlečenja, ki trenutno poteka. Lahko ga pokliče samo aplikacija, ki je sprožila operacijo vlečenja.
  • View#cancelDragAndDrop()
    • Prekliče operacijo vlečenja, ki trenutno poteka. Lahko ga pokliče samo aplikacija, ki je sprožila operacijo vlečenja.
  • Preverjanje, ali naprava podpira načina proste oblike ali slike v sliki, je možno prek PackageManager#hasSystemFeature(), z uporabo PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT in PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE oz.
  • The android: windowBackground atribut se lahko uporabi kot ozadje za risanje, če se spreminja velikost dejavnosti in njeno upodabljanje zaostaja. če android: windowBackground ni nastavljen, android: windowBackgroundFallback se uporablja namesto tega. Za primer si oglejte vzorčno aplikacijo Multi-Window Playground.
Wale je ponudil nekaj najboljših praks, da bodo vaši uporabniki imeli najboljšo možno izkušnjo:
  • Način ročaja se elegantno spreminja:
    • Ohranite doslednost uporabniškega vmesnika ne glede na orientacijo. Elementi ne smejo spreminjati položaja, da bi omogočili gladke prehode.
    • Če razširim zgoraj navedeno, ne preklapljajte med zelo različnimi postavitvami za postavitve telefona/tablice. Namesto tega prilagodite postavitev tablice za manjše velikosti zaradi skladnosti.
  • Poskrbite, da bodo vaše dejavnosti prilagojene majhnim velikostim avtor po vzorcih Material Design.
  • Uporaba FLAG_ACTIVITY_LAUNCH_ADJACENT ko je smiselno poskrbeti za prijetnejšo izkušnjo v načinu razdeljenega zaslona.
  • Nezdružljivost spreminjanja velikosti razglasite le, če je to upravičeno. Kot smo razpravljali zgoraj, vaša aplikacija drugače izstopa na slab način.
Wale je sejo zaključil s ponudbo dodatnih uporabnih virov:
  • Dokumentacija z več okni.
  • Smernice za materialno oblikovanje za način deljenega zaslona.
  • Primer aplikacije z več okni.