Vairāki logi operētājsistēmā Android N: kas jāzina izstrādātājiem, lai to izmantotu pēc iespējas labāk

Mēs sniedzam pārskatu par to, ko izstrādātājiem nozīmēs gaidāmais vairāku logu atbalsts operētājsistēmā Android N un kā to vislabāk izmantot!

Vairāku logu atbalsts ir lieliska funkcija, ko mēs gaidām operētājsistēmā Android N un mēs jau sen vēlējāmies, lai tas būtu pieejams visās ierīcēs. Tomēr, lai tā būtu patīkama pieredze, izstrādātājiem, iespējams, būs jāveic dažas izmaiņas savās lietotnēs, lai to pareizi atbalstītu.

Viena no Google I/O sesijām bija paredzēta izstrādātājiem, lai uzzinātu par jaunajiem API un sistēmas uzvedības izmaiņām, ko sniedz vairāku logu atbalsts.

Sesiju prezentēja Wale Ogunwale, Android ActivityManager tehniskais vadītājs un WindowManager ietvara komponenti — viņš un viņa komanda ir atbildīgi par vairāku logu izmantošanu operētājsistēmā Android.

Jūs varat skatīties Vairāku logu režīma sesija pakalpojumā YouTube, bet šeit sniedzam arī sesijas pārskatu.

N ievieš trīs dažādus vairāku logu režīmus:
  • Sadalītā ekrāna režīms: šis ir režīms, kas ir pieejams pēc noklusējuma. Kā norāda nosaukums, tas ļauj atvērt divas lietojumprogrammas blakus.
  • Brīvas formas režīms: ražotāji to var iespējot lielākās ierīcēs, kas ļauj lietotājiem brīvi mainīt darbību izmērus papildus dalītā ekrāna režīmam.
  • Attēls attēlā režīms: paredzēts Android TV ierīcēm. Šis režīms ir paredzēts video atskaņotājiem, kas darbojas piespraustā logā, kamēr lietotājs mijiedarbojas ar citām lietojumprogrammām.
Android N sadalītā ekrāna režīmsAndroid N attēls režīms
Ir vērts to atzīmēt. mēs jau iepriekš esam apskatījuši vairākus logus par N un piedāvājuši kritiku par pašreizējo sistēmu. Paturot to prātā, mēs ceram, ka brīvās formas režīms nedaudz pietuvosies attēlam attēlā, jo tam būtu noderīgas lietojumprogrammas visās ierīcēs.
Vairāku logu atbalsta iespējošana savās lietotnēs ir vienkārša: jums nekas nav jādara, ja jau atlasāt mērķauditoriju N. Ja vēlaties atspējot vairāku logu režīmu, varat to izdarīt, iestatot. android: resizeableActivity aktivitātes atribūts jūsu manifestā. false. Tas jādara tikai tad, ja tas ir patiesi pamatots, jo tas vienmēr liek jūsu lietotnei izcelties palaišana pilnekrāna režīmā pat tad, ja lietotājs (vai cita lietotne) mēģina to palaist vairākos logos režīmā. Ir svarīgi ņemt vērā, ka saknes aktivitātes atribūti attiecas uz visām darbībām tās uzdevumu stekā. Citiem vārdiem sakot, ja jums ir darbība, ko var sākt citas lietotnes, pārliecinieties, vai tā atbalsta vairāku logu režīmu. jo jūs nevarat garantēt, ka citas lietotnes sāks jūsu darbības jaunā uzdevumā, izmantojot. Intent#FLAG_ACTIVITY_NEW_TASK .Attēls attēlā režīma atbalsts ir skaidri jāpaziņo, izmantojot. android: supportsPictureInPicture atribūts. Ņemiet vērā, ka šis atribūts tiek ignorēts, ja. android: resizeableActivity ir. false .Layout atribūtus var izmantot, lai iestatītu noklusējuma izmērus un izvietojumu brīvas formas logiem vai norādītu minimālo platumu vai augstumu gan brīvas formas, gan dalīta ekrāna režīmiem:
  • android: defaultWidth/android: defaultHeight: aktivitātes noklusējuma izmēri (brīvās formas režīms).
  • android: gravity: aktivitātes sākuma pozīcija (brīvās formas režīms).
  • android: minimalWidth/android: minimalHeight: aktivitātes minimālie izmēri (brīvas formas un dalītā ekrāna režīmi)
Koda piemēru varat atrast šeit. Google Multi-Window Playground lietotnes paraugs vietnē GitHub: AndroidManifest.xml.
Ieviešot vairāku logu atbalstu, iespējams, vajadzēs vēlreiz pārbaudīt dažas lietas savās lietotnēs, lai pārliecinātos, ka tās darbojas pareizi.

Izpratne par aktivitātes dzīves ciklu

The. aktivitātes dzīves cikls ir nemainīgs vairāku logu režīmā: Android Activity Basic dzīves cikls Tomēr dažas smalkas atšķirības starp aktivitātes stāvokļiem var izraisīt neparedzētu uzvedību, ko parasti nepamanītu pirms N. Ir svarīgi to zināt. Activity#onResume() un. Activity#onPause() tiek izsaukti, kad jūsu lietotne iegūst vai zaudē fokusu, bet ne vienmēr, kad tā sāk vai pārstāj būt redzama. (Ņemiet vērā, ka jebkurā brīdī fokuss var būt tikai vienai lietotnei.) Lietojumprogrammām, kas pastāvīgi atjaunina saturu (piemēram, video atskaņošana), noteikti veiciet satura atjaunināšanas sākšanu un apturēšanu. Activity#onStart() un. Activity#onStop() vietā. Tas netiek darīts, piemēram, video lietotnēm, nozīmē, ka atskaņošana notiks tikai tad, ja lietotne ir fokusēta, kas pārspēj vairāku logu režīma mērķi. Oficiālajā YouTube lietotnē bija līdzīga problēma, kad pirmo reizi tika palaists Android N izstrādātāja priekšskatījums.

Izpildlaika izmaiņu apstrāde

Kad lietotne tiek ieslēgta vairāku logu režīmā, dažas ierīces konfigurācijas mainīsies. Varat atļaut savu darbību atsākt (tādā gadījumā. saglabājot Fragmentus varētu būt laba ideja, ja jūsu darbībai startēšanas laikā jāveic intensīva darbība), vai arī izvēlieties to. skaidri apstrādāt konfigurācijas izmaiņas vietā. Ieejot vairāku logu režīmā vai tajā var mainīties četras ierīces konfigurācijas: screenSize, smallestScreenSize, screenLayout un. orientation. Skatiet uz. Android izstrādātāju dokumentācija lai iegūtu vairāk informācijas par katru atribūtu, taču ņemiet vērā to. orientation šajā gadījumā vairs neattiecas uz ierīces orientāciju. Tā vietā tas tikai norāda, vai jūsu aktivitātes platums ir lielāks par tās augstumu (ainava) vai nav (portrets).Paziņot, ka jūsu darbība apstrādās šīs izmaiņas, var veikt manifestā:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Ņemiet vērā, ka tas nozīmē, ka jums būs jārisina šīs izmaiņas. Activity#onConfigurationChanged(), manuāli atjauninot skatus vai atkārtoti ielādējot dažus resursus.

Atspējotas funkcijas vairāku logu režīmā

Vairāku logu režīmā jūsu darbības neietekmēs dažas sistēmas funkcijas.
  • Statusa joslas un navigācijas joslas izmaiņām, piemēram, aptumšot/slēpjot sistēmas joslas vai izmantojot ieskaujošo režīmu, nebūs nekādas ietekmes. Tas ir loģiski, jo jūsu darbības aizņem tikai daļu no ekrāna.
  • The android: screenOrientation aktivitātes atribūtam nav nekādas ietekmes arī vairāku logu režīmā: tā kā jūsu aktivitātes lielums būs maināms, vairs nav jēgas, ka tai ir noteikta orientācija.
Ir pievienoti jauni atzvani vairāku logu notikumiem, kā arī metodes pašreizējā stāvokļa vaicāšanai.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): tiek izsaukts, kad aktivitātes stāvoklis mainās no pilnekrāna uz vairāku logu režīmu un otrādi.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): izsauc, kad aktivitātes stāvoklis mainās uz/no PIP režīma.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): atgriezt, vai darbība ir vairāku logu/attēls attēlā režīmā vai nē.
  • Activity#overlayWithDecorCaption(boolean overlay): brīvas formas logiem šo metodi var izmantot, lai parakstu (joslu, ko izmanto loga vilkšanai) pārklātu ar saturu, nevis nospiestu to uz leju.
PS. Izņemot. Activity#overlayWithDecorCaption(), šīs metodes nodrošina arī. Fragment klasē.

Darbību sākšana vairāku logu režīmā

  • Activity#enterPictureInPictureMode() var izmantot, lai iestatītu darbību attēla attēlā režīmā. Ņemiet vērā, ka par darbībām attēla attēlā režīmā netiek paziņots par ievades notikumiem — lietojums MediaSession#setMediaButtonReceiver() ja vēlaties risināt šādus notikumus. Noteikti pārbaudiet arī Android izstrādātāju vietni, ja jūs interesē Attēls attēlā operētājsistēmā Android N.
  • Ja ierīce ir sadalīta ekrāna režīmā, varat likt sistēmai uzsākt citu darbību blakus jūsu darbībai, izmantojot Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT karogs. Karogam nav nekādas ietekmes, ja tas nav sadalīta ekrāna režīmā.
  • Ja ierīce ir brīvas formas režīmā, ActivityOptions#setLaunchBounds() var izmantot, lai norādītu jaunās aktivitātes izmērus un atrašanās vietu ekrānā.
Koda piemērus skatiet Multi-Window Playground parauga lietotnē: blakus darbības piemērs, palaišanas robežu piemērs.

Vilkt un nomest

Lai gan vilkšanas un nomešanas atbalsts pastāv kopš Honeycomb, iepriekš tas bija iespējams tikai vienas darbības ietvaros. Tas ir tagad. atbalstīts vairākos logos arī. Šķiet, ka tas ir jāīsteno. pārsvarā tāds pats kā iepriekš, ar dažiem papildinājumiem savstarpējās darbības vilkšanai un nomešanai:
  • View#startDragAndDrop()
    • Jauns aizstājvārds View#startDrag().
    • Lai iespējotu pārrobežu darbību, velciet un nometiet, nododiet jauno karogu View#DRAG_FLAG_GLOBAL.
    • Ja jums ir jāpiešķir URI atļaujas adresāta darbībai, nododiet jaunos karogus View#DRAG_FLAG_GLOBAL_URI_READ vai View#DRAG_FLAG_GLOBAL_URI_WRITE, pēc vajadzības.
  • View#updateDragShadow()
    • Aizstāj vilkšanas ēnu pašlaik notiekošajai vilkšanas darbībai. To var izsaukt tikai tā lietotne, kas izraisīja vilkšanas darbību.
  • View#cancelDragAndDrop()
    • Atceļ pašlaik notiekošo vilkšanas darbību. To var izsaukt tikai tā lietotne, kas izraisīja vilkšanas darbību.
  • Pārbaudīt, vai ierīce atbalsta brīvas formas vai attēlu attēlā režīmus, ir iespējams, izmantojot PackageManager#hasSystemFeature(), izmantojot PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT un PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE attiecīgi.
  • The android: windowBackground atribūtu var izmantot kā fona zīmējumu, ja aktivitātes lielums tiek mainīts un tās renderēšana atpaliek. Ja android: windowBackground ir atiestatīts, android: windowBackgroundFallback vietā tiek izmantots. Skatiet piemēru Multi-Window Playground lietotnes paraugā.
Vels piedāvāja dažus paraugprakses piemērus, lai nodrošinātu lietotājiem vislabāko iespējamo pieredzi.
  • Roktura režīms mainās eleganti:
    • Saglabājiet lietotāja interfeisa konsekvenci neatkarīgi no orientācijas. Neļaujiet elementiem mainīt pozīcijas, lai nodrošinātu vienmērīgas pārejas.
    • Paplašinot iepriekš minēto, nepārslēdzieties starp ļoti dažādiem tālruņu/planšetdatoru izkārtojumiem. Tā vietā pielāgojiet planšetdatora izkārtojumu mazākiem izmēriem, lai nodrošinātu konsekvenci.
  • Pārliecinieties, ka jūsu aktivitātes ir piemērotas maziem izmēriem autors ievērojot materiālu dizaina modeļus.
  • Izmantot FLAG_ACTIVITY_LAUNCH_ADJACENT kad ir jēga radīt patīkamāku pieredzi dalīta ekrāna režīmā.
  • Paziņojiet par izmēru maiņas nesaderību tikai tad, ja tas ir pamatoti. Kā mēs apspriedām iepriekš, pretējā gadījumā jūsu lietotne tiek sliktā veidā izcelta.
Vels noslēdza sesiju, piedāvājot dažus papildu noderīgus resursus:
  • Vairāku logu dokumentācija.
  • Materiālu dizaina vadlīnijas dalītā ekrāna režīmam.
  • Vairāku logu lietotnes paraugs.