Više prozora u Androidu N: Što razvojni programeri trebaju znati da bi to iskoristili na najbolji način

click fraud protection

Pružamo pregled onoga što nadolazeća podrška za više prozora u Androidu N znači za programere i kako to najbolje iskoristiti!

Podrška za više prozora zgodna je značajka koju čekamo u Androidu N, i već dugo želimo da bude dostupan na svim uređajima. Da bi to bilo ugodno iskustvo, programeri će možda morati napraviti neke promjene u svojim aplikacijama kako bi ga ispravno podržavali.

Jedna od Google I/O sesija bila je namijenjena programerima za učenje o novim API-jima i promjenama ponašanja sustava koje donosi podrška za više prozora.

Sesiju su predstavili Wale Ogunwale, vodeći tehnički menadžer za Android ActivityManager i Komponente okvira WindowManager -- on i njegov tim odgovorni su za više prozora na Androidu.

Možete gledati Sesija s više prozora na YouTubeu, ali ovdje donosimo i pregled sjednice.

N uvodi tri različita načina rada s više prozora:
  • Način rada podijeljenog zaslona: ovo je način rada koji je dostupan prema zadanim postavkama. Kao što naziv implicira, omogućuje vam otvaranje dvije aplikacije jednu do druge.
  • Način slobodnog oblika: proizvođači to mogu omogućiti na većim uređajima, što korisnicima omogućuje slobodnu promjenu veličine aktivnosti uz način podijeljenog zaslona.
  • Način rada slika u slici: namijenjen uređajima s Android TV-om, ovaj način rada namijenjen je za pokretanje video playera u zakačenom prozoru dok korisnik komunicira s drugim aplikacijama.
Android N način rada s podijeljenim zaslonomAndroid N PiP način
Vrijedno je napomenuti da. već smo govorili o više prozora na N i ponudili neke kritike trenutnog sustava. Imajući to na umu, nadamo se da će se način slobodnog oblika malo približiti načinu rada slika u slici jer bi to imalo korisne aplikacije na svim uređajima.
Omogućivanje podrške za više prozora u vašim aplikacijama jednostavno je: ne morate ništa učiniti ako već ciljate N. Ako odlučite onemogućiti više prozora, to možete učiniti postavljanjem. android: resizeableActivity atribut aktivnosti u vašem manifestu. false. To bi trebalo učiniti samo ako je doista opravdano, jer time se vaša aplikacija uvijek ističe na loš način pokretanje u načinu rada preko cijelog zaslona čak i ako je korisnik (ili druga aplikacija) pokuša pokrenuti u više prozora način rada. Važno je napomenuti da se atributi korijenske aktivnosti primjenjuju na sve aktivnosti unutar skupa zadataka. Drugim riječima, ako imate aktivnost koju mogu pokrenuti druge aplikacije, provjerite podržava li način rada s više prozora budući da ne možete jamčiti da će druge aplikacije pokrenuti vašu aktivnost u novom zadatku pomoću. Intent#FLAG_ACTIVITY_NEW_TASK .Podrška za način rada slika u slici mora biti deklarirana eksplicitno putem. android: supportsPictureInPicture atribut. Imajte na umu da se ovaj atribut zanemaruje ako. android: resizeableActivity je. false .Layout atributi mogu se koristiti za postavljanje zadanih dimenzija i položaja za prozore slobodnog oblika ili za određivanje minimalne širine ili visine i za načine slobodnog oblika i za način podijeljenog zaslona:
  • android: defaultWidth/android: defaultHeight: zadane dimenzije aktivnosti (način slobodnog oblika).
  • android: gravity: početni položaj aktivnosti (način slobodnog oblika).
  • android: minimalWidth/android: minimalHeight: minimalne dimenzije aktivnosti (načini slobodnog oblika i podijeljenog zaslona)
Primjer koda možete pronaći u. Googleov primjer aplikacije Multi-Window Playground na GitHubu: AndroidManifest.xml.
S uvođenjem podrške za više prozora, možda ćete morati još jednom provjeriti nekoliko stvari u svojim aplikacijama kako biste bili sigurni da rade ispravno.

Razumijevanje životnog ciklusa aktivnosti

The. životni ciklus aktivnosti nepromijenjen je u načinu rada s više prozora: Osnovni životni ciklus Android aktivnosti Uz to, neke suptilne razlike između stanja aktivnosti mogu rezultirati neželjenim ponašanjem koje inače ne biste primijetili prije N. Važno je to znati. Activity#onResume() i. Activity#onPause() pozivaju se kada vaša aplikacija dobije ili izgubi fokus, ali ne nužno kada se pokrene ili prestane biti vidljiva. (Zapamtite da samo jedna aplikacija može imati fokus u bilo kojem trenutku.) Za aplikacije koje stalno ažuriraju sadržaj (npr. reprodukcija videozapisa), pobrinite se da upravljate pokretanjem i zaustavljanjem ažuriranja sadržaja. Activity#onStart() i. Activity#onStop() umjesto toga. Ne čineći to za video aplikacije, na primjer, znači da će se reprodukcija dogoditi samo ako je aplikacija fokusirana, što poništava svrhu načina rada s više prozora. Službena YouTube aplikacija imala je sličan problem kada je prvi put pokrenut Android N Developer Preview.

Rukovanje promjenama vremena izvođenja

Kada se aplikacija stavi u način rada s više prozora, neke će se konfiguracije uređaja promijeniti. Možete dopustiti ponovno pokretanje svoje aktivnosti (u tom slučaju. zadržavanje Fragmenata može biti dobra ideja, ako vaša aktivnost mora izvršiti intenzivnu operaciju pri pokretanju), ili odaberite to. eksplicitno obraditi promjene konfiguracije umjesto toga. Četiri konfiguracije uređaja mogu se promijeniti prilikom ulaska ili unutar načina s više prozora: screenSize, smallestScreenSize, screenLayout i. orientation. Odnosi se na. Dokumentacija za programere Androida za više informacija o svakom atributu, ali imajte na umu da. orientation više se ne odnosi na orijentaciju uređaja u ovom slučaju. Umjesto toga, samo označava je li širina vaše aktivnosti veća od visine (pejzaž) ili ne (portret). Izjava da će vaša aktivnost obraditi ove promjene može se učiniti iz manifesta:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Imajte na umu da to znači da ćete zapravo morati obraditi te promjene. Activity#onConfigurationChanged(), ručnim ažuriranjem pogleda ili ponovnim učitavanjem nekih resursa.

Onemogućene značajke u načinu rada s više prozora

Vaše aktivnosti neće utjecati na neke značajke sustava dok ste u načinu s više prozora:
  • Promjene statusne trake i navigacijske trake, poput zatamnjivanja/skrivanja sistemskih traka ili korištenja imerzivnog načina, neće imati učinka. Ovo ima smisla jer vaša aktivnost zauzima samo dio zaslona.
  • The android: screenOrientation atribut aktivnosti također nema učinka u načinu rada s više prozora: budući da će vaša aktivnost moći mijenjati veličinu, više nema smisla da ima fiksnu orijentaciju.
Dodani su novi povratni pozivi za događaje s više prozora, kao i metode za ispitivanje trenutnog stanja.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): poziva se kada se stanje aktivnosti promijeni iz cijelog zaslona u više prozora i obrnuto.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): poziva se kada se stanje aktivnosti promijeni u/iz PIP načina.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): vraća je li aktivnost u načinu rada s više prozora/slika u slici ili ne.
  • Activity#overlayWithDecorCaption(boolean overlay): za prozore slobodnog oblika, ova se metoda može koristiti za postavljanje naslova (traka koja se koristi za povlačenje prozora) preko sadržaja umjesto da se gura prema dolje.
P.S. Osim za. Activity#overlayWithDecorCaption(), ove metode također nudi. Fragment razreda.

Pokretanje aktivnosti u načinu rada s više prozora

  • Activity#enterPictureInPictureMode() može se koristiti za postavljanje aktivnosti u način rada slika u slici. Imajte na umu da se aktivnosti u načinu PiP ne obavještavaju o događajima unosa -- koristite MediaSession#setMediaButtonReceiver() ako želite rješavati takve događaje. Također svakako provjerite web stranicu Android Developers ako ste zainteresirani Slika u slici na Androidu N.
  • Ako je uređaj u načinu podijeljenog zaslona, ​​možete reći sustavu da pokrene drugu aktivnost pored vaše pomoću Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT zastava. Zastavica nema učinka ako nije u načinu podijeljenog zaslona.
  • Ako je uređaj u slobodnom načinu rada, ActivityOptions#setLaunchBounds() može se koristiti za određivanje dimenzija i lokacije nove aktivnosti na zaslonu.
Za primjere kodova pogledajte oglednu aplikaciju Multi-Window Playground: primjer susjedne aktivnosti, primjer granica pokretanja.

Povuci i ispusti

Dok podrška za povlačenje i ispuštanje postoji još od Honeycomba, prije je bila moguća samo unutar iste aktivnosti. Sniježi. podržano u više prozora također. Provedba ovoga čini se. uglavnom isto kao i prije, s nekoliko dodataka za povlačenje i ispuštanje između aktivnosti:
  • View#startDragAndDrop()
    • Novi alias za View#startDrag().
    • Da biste omogućili povlačenje i ispuštanje više aktivnosti, dodajte novu zastavu View#DRAG_FLAG_GLOBAL.
    • Ako trebate dati URI dozvole za aktivnost primatelja, proslijedite nove oznake View#DRAG_FLAG_GLOBAL_URI_READ ili View#DRAG_FLAG_GLOBAL_URI_WRITE, prema potrebi.
  • View#updateDragShadow()
    • Zamjenjuje sjenu povlačenja za operaciju povlačenja koja je trenutno u tijeku. Može ga pozvati samo aplikacija koja je pokrenula operaciju povlačenja.
  • View#cancelDragAndDrop()
    • Otkazuje operaciju povlačenja koja je trenutno u tijeku. Može ga pozvati samo aplikacija koja je pokrenula operaciju povlačenja.
  • Provjera podržava li uređaj načine slobodnog oblika ili sliku u slici moguća je putem PackageManager#hasSystemFeature(), koristeći PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT i PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE odnosno.
  • The android: windowBackground atribut se može koristiti kao pozadina koja se može crtati ako se aktivnost mijenja u veličini i njezino prikazivanje kasni. Ako android: windowBackground nije postavljeno, android: windowBackgroundFallback umjesto toga se koristi. Za primjer pogledajte oglednu aplikaciju Multi-Window Playground.
Wale je ponudio neke najbolje prakse kako bi vaši korisnici imali najbolje moguće iskustvo:
  • Način ručke se elegantno mijenja:
    • Održavajte dosljednost korisničkog sučelja bez obzira na orijentaciju. Neka elementi ne mijenjaju položaje kako bi omogućili glatke prijelaze.
    • Proširujući gore navedeno, nemojte se prebacivati ​​između vrlo različitih izgleda za izgled telefona/tableta. Umjesto toga prilagodite izgled tableta za manje veličine radi dosljednosti.
  • Pobrinite se da se vaše aktivnosti prilagode malim veličinama po slijedeći obrasce materijalnog dizajna.
  • Koristiti FLAG_ACTIVITY_LAUNCH_ADJACENT kada ima smisla napraviti ugodnije iskustvo u načinu podijeljenog zaslona.
  • Proglasite nekompatibilnost promjene veličine samo kada je to opravdano. Kao što smo već spomenuli, inače se vaša aplikacija ističe na loš način.
Wale je završio sesiju ponudivši neke dodatne korisne resurse:
  • Dokumentacija s više prozora.
  • Smjernice materijalnog dizajna za način podijeljenog zaslona.
  • Primjer aplikacije s više prozora.