Több ablak az Android N-ben: mit kell tudniuk a fejlesztőknek, hogy a legjobbat hozhassák ki belőle

Áttekintést adunk arról, hogy az Android N közelgő többablakos támogatása mit jelent a fejlesztők számára, és hogyan hozhatják ki belőle a legtöbbet!

A többablakos támogatás egy ügyes funkció, amelyre várunk az Android N és már régóta szerettük volna, hogy minden eszközön elérhető legyen. Ahhoz azonban, hogy élvezetes élmény legyen, a fejlesztőknek szükségük lehet néhány változtatásra az alkalmazásaikban, hogy megfelelően támogassák.

A Google I/O munkamenetei közül a fejlesztők megismerkedhettek az új API-kkal és a többablakos támogatással járó rendszerviselkedési változásokkal.

A foglalkozást Wale Ogunwale, az Android ActivityManager és az Android ActivityManager műszaki vezető menedzsere prezentálta A WindowManager keretrendszer összetevői – ő és csapata a felelősek a több ablakos használatért Androidon.

Meg lehet nézni a Több ablakos mód munkamenet a YouTube-on, de itt adunk áttekintést is a foglalkozásról.

Az N három különböző többablakos módot mutat be:
  • Osztott képernyős mód: ez az alapértelmezés szerint elérhető mód. Ahogy a neve is sugallja, lehetővé teszi két alkalmazás megnyitását egymás mellett.
  • Szabad formájú mód: a gyártók engedélyezhetik ezt a nagyobb eszközökön, így a felhasználók az osztott képernyős mód mellett szabadon átméretezhetik a tevékenységeket.
  • Kép a képben mód: az Android TV-készülékeket célozza meg, ez a mód arra szolgál, hogy a videólejátszók rögzített ablakban futhassanak, miközben a felhasználó más alkalmazásokkal kommunikál.
Android N Osztott képernyős módAndroid N PiP mód
Ezt érdemes megjegyezni. Korábban foglalkoztunk az N multi-window-val, és kritizáltuk a jelenlegi rendszert. Ezt szem előtt tartva reméljük, hogy a szabad formájú mód egy kicsit közelebb kerül a kép a képben módhoz, mivel annak minden eszközön hasznos alkalmazásai lennének.
A többablakos támogatás engedélyezése az alkalmazásokban egyszerű: semmit sem kell tennie, ha már az N-t célozza meg. Ha úgy dönt, hogy letiltja a több ablakot, ezt a következő beállításával teheti meg. android: resizeableActivity tevékenység attribútuma a jegyzékében. false. Ezt csak akkor szabad megtenni, ha valóban indokolt, mert ettől az alkalmazásod mindig rossz szemmel tűnik ki teljes képernyős módban történő indítás akkor is, ha a felhasználó (vagy egy másik alkalmazás) több ablakban próbálja elindítani mód. Fontos megjegyezni, hogy a gyökértevékenység attribútumai a feladatveremen belüli összes tevékenységre vonatkoznak. Más szóval, ha olyan tevékenysége van, amelyet más alkalmazások is elindíthatnak, győződjön meg arról, hogy támogatja a több ablakos módot mivel nem tudja garantálni, hogy más alkalmazások új feladatban indítják el tevékenységét a használatával. Intent#FLAG_ACTIVITY_NEW_TASK A kép a képben mód támogatását kifejezetten deklarálni kell a következőn keresztül. android: supportsPictureInPicture tulajdonság. Vegye figyelembe, hogy ezt az attribútumot a rendszer figyelmen kívül hagyja, ha. android: resizeableActivity van. false A .Layout attribútumok használhatók a szabad formájú ablakok alapértelmezett méreteinek és elhelyezésének beállítására, vagy minimális szélesség vagy magasság megadására szabad formájú és osztott képernyős módokhoz egyaránt:
  • android: defaultWidth/android: defaultHeight: a tevékenység alapértelmezett méretei (szabad formájú mód).
  • android: gravity: a tevékenység kezdeti pozíciója (szabadformájú mód).
  • android: minimalWidth/android: minimalHeight: a tevékenység minimális méretei (szabad formájú és osztott képernyős módok)
Itt találsz egy kódpéldát. A Google Multi-Window Playground mintalkalmazása a GitHubon: AndroidManifest.xml.
A többablakos támogatás bevezetésével előfordulhat, hogy még egyszer ellenőriznie kell néhány dolgot az alkalmazásokban, hogy megbizonyosodjon arról, hogy megfelelően működnek.

A tevékenység életciklusának megértése

A. tevékenység életciklusa változatlan több ablakos módban: Android Activity Basic Lifecycle Ennek ellenére az aktivitási állapotok közötti apró különbségek olyan nem kívánt viselkedést eredményezhetnek, amelyet N előtt általában nem vesz észre. Ezt fontos tudni. Activity#onResume() és. Activity#onPause() akkor hívják meg, amikor az alkalmazás fókuszba kerül vagy elveszíti, de nem feltétlenül akkor, amikor elkezdődik vagy megszűnik láthatóvá válni. (Ne feledje, hogy egy adott időpontban csak egy alkalmazás lehet fókuszban.) Azon alkalmazások esetében, amelyek folyamatosan frissítik a tartalmat (pl. videólejátszás), ügyeljen arra, hogy a tartalomfrissítések elindítását és leállítását kezelje. Activity#onStart() és. Activity#onStop() helyette. Nem teszi ezt például a videoalkalmazások esetében, azt jelenti, hogy a lejátszás csak akkor történik meg, ha az alkalmazás fókuszban van, amely legyőzi a több ablakos mód célját. A hivatalos YouTube alkalmazásnak hasonló problémája volt az Android N Developer Preview első elindításakor.

Futásidejű változások kezelése

Amikor egy alkalmazást több ablakos módba helyez, bizonyos eszközkonfigurációk megváltoznak. Megengedheti tevékenységének újraindítását (ebben az esetben. töredékek megtartása jó ötlet lehet, ha tevékenységének intenzív műveletet kell végrehajtania az indításkor), vagy úgy dönt. kifejezetten kezeli a konfigurációs változásokat helyette. Négy eszközkonfiguráció módosulhat a többablakos módba lépéskor vagy azon belül: screenSize, smallestScreenSize, screenLayout és. orientation. Utal. Android Developers dokumentáció az egyes attribútumokról további információért, de vegye figyelembe. orientation ebben az esetben már nem az eszköz tájolására utal. Ehelyett csupán azt jelzi, hogy a tevékenység szélessége nagyobb-e, mint a magassága (tájkép), ill nem (portré). A jegyzékből kijelentheti, hogy tevékenysége kezelni fogja ezeket a változtatásokat:
android: name=".MyActivity"android: configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
Ne feledje, hogy ez azt jelenti, hogy valóban kezelnie kell ezeket a változásokat. Activity#onConfigurationChanged(), a nézetek manuális frissítésével vagy egyes erőforrások újratöltésével.

Letiltott funkciók több ablakos módban

A többablakos módban végzett tevékenységei bizonyos rendszerfunkciókat nem érintenek:
  • Az állapotsor és a navigációs sáv módosításai, mint például a rendszersávok elsötétítése/elrejtése vagy az immerzív mód használata, nincs hatással. Ez logikus, mivel tevékenysége csak a képernyő egy részét foglalja el.
  • A android: screenOrientation Az activity attribútumnak nincs hatása több ablakos módban: mivel a tevékenység átméretezhető lesz, már nincs értelme, hogy fix tájolású legyen.
Új visszahívások kerültek hozzáadásra a többablakos eseményekhez, valamint az aktuális állapot lekérdezésének módszerei.
  • Activity#onMultiWindowModeChanged(boolean inMultiWindow): akkor hívják meg, ha a tevékenység állapota teljes képernyőről több ablakra változik, és fordítva.
  • Activity#onPictureInPictureModeChanged(boolean inPictureOnPicture): akkor hívják meg, ha a tevékenység állapota PIP módba változik/változik.
  • Activity#isInMultiWindowMode()/Activity#isInPictureInPictureMode(): visszaküldi, hogy a tevékenység több ablakos/kép a képben módban van-e vagy sem.
  • Activity#overlayWithDecorCaption(boolean overlay): szabad formájú ablakok esetén ezzel a módszerrel a felirat (az ablak körbehúzására szolgáló sáv) a tartalom lefedésére használható ahelyett, hogy lenyomná.
PS. Kivéve a. Activity#overlayWithDecorCaption(), ezeket a módszereket is a. Fragment osztály.

Tevékenységek indítása Több ablakos módban

  • Activity#enterPictureInPictureMode() egy tevékenység kép a képben módba helyezésére használható. Ne feledje, hogy a PiP módban végzett tevékenységek nem kapnak értesítést a bemeneti eseményekről – használat MediaSession#setMediaButtonReceiver() ha ilyen eseményeket akar kezelni. Ha érdekel, feltétlenül nézze meg az Android Developers webhelyet is Kép a képben Android N rendszeren.
  • Ha az eszköz osztott képernyős módban van, a gombbal utasíthatja a rendszert, hogy indítson egy másik tevékenységet az Öné mellett Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT zászló. A zászlónak nincs hatása, ha nem osztott képernyős módban van.
  • Ha a készülék szabad formájú módban van, ActivityOptions#setLaunchBounds() segítségével megadható az új tevékenység mérete és helye a képernyőn.
Kódpéldákért nézze meg a Multi-Window Playground minta alkalmazást: szomszédos tevékenység példája, indítási határok példája.

Drag and Drop

Míg a drag and drop támogatás a Honeycomb óta létezik, korábban csak ugyanazon a tevékenységen belül volt lehetséges. Havazik. több ablakban támogatott is. Ennek megvalósítása úgy tűnik. többnyire ugyanaz, mint korábban, néhány kiegészítéssel a kereszttevékenységekre vonatkozó drag and drop érdekében:
  • View#startDragAndDrop()
    • Új álnév a következőhöz View#startDrag().
    • A tevékenységek közötti áthúzás engedélyezéséhez adja át az új jelzőt View#DRAG_FLAG_GLOBAL.
    • Ha URI-engedélyeket kell adnia a címzett tevékenységhez, adja át az új jelzőket View#DRAG_FLAG_GLOBAL_URI_READ vagy View#DRAG_FLAG_GLOBAL_URI_WRITE, adott esetben.
  • View#updateDragShadow()
    • Lecseréli a húzási árnyékot az éppen folyamatban lévő húzási műveletnél. Csak az az alkalmazás hívhatja meg, amelyik a húzási műveletet kezdeményezte.
  • View#cancelDragAndDrop()
    • Megszakítja az éppen folyamatban lévő húzási műveletet. Csak az az alkalmazás hívhatja meg, amelyik a húzási műveletet kezdeményezte.
  • Ezen keresztül ellenőrizheti, hogy egy eszköz támogatja-e a szabad formájú vagy a kép a képben módot PackageManager#hasSystemFeature(), segítségével PackageManager#FEATURE_FREEFORM_WINDOW_MANAGEMENT és PackageManager#FEATURE_FREEFORM_PICTURE_IN_PICTURE illetőleg.
  • A android: windowBackground attribútum használható háttérrajzolásként, ha a tevékenység átméretezése folyamatban van, és a megjelenítése elmarad. Ha android: windowBackground nincs beállítva, android: windowBackgroundFallback helyett használják. Példaként tekintse meg a Multi-Window Playground minta alkalmazást.
Wale felajánlott néhány bevált módszert annak biztosítására, hogy felhasználói a lehető legjobb élményben részesüljenek:
  • A fogantyú mód elegánsan változik:
    • Fenntartja a felhasználói felület konzisztenciáját a tájolástól függetlenül. Ne változtassa meg az elemek pozícióját a sima átmenetek érdekében.
    • A fentieket kibővítve, ne váltson a nagyon különböző elrendezések között a telefon/táblagép elrendezése esetén. Ehelyett igazítsa a táblagép elrendezését kisebb méretekhez a következetesség érdekében.
  • Ügyeljen arra, hogy tevékenységei alkalmazkodjanak a kis méretekhez által az anyagtervezési mintákat követve.
  • Használat FLAG_ACTIVITY_LAUNCH_ADJACENT amikor van értelme élvezetesebb élményt nyújtani osztott képernyős módban.
  • Csak indokolt esetben jelentse az átméretezés összeférhetetlenségét. Ahogy fentebb tárgyaltuk, ettől eltérő módon az alkalmazás rossz értelemben tűnik ki.
Wale azzal zárta az ülést, hogy felajánlott néhány további hasznos forrást:
  • Több ablakos dokumentáció.
  • Anyagtervezési irányelvek az osztott képernyős módhoz.
  • Példa több ablakos alkalmazásra.