Download PDF[PDF 1.2MB]
Panoramica
Multifinestra è una funzionalità del sistema operativo Android* in grado di fare la differenza sulle vostre app. Molti OEM e ODM quali Samsung, Ramos e Huawei impiegano funzionalità per promuovere i loro prodotti e farli risaltare rispetto ad altri prodotti. In questo articolo, introdurremo la funzione multifinestra e vi mostreremo come implementarla nelle app.
Figura 1. Casi d'uso di multifinestra
Introduzione
In June, 2012, the first open source multi-tasking framework, called Cornerstone, was developed. In August 2012, Samsung launched the first multi-window commercial product. And from 2013 until now, there has been an explosion of multi-window solutions on the market (see Figure 2).
Figura 2. Evoluzione multifinestra
I due tipi di stili multifinestra sono: fluttuante o ancorata. La funzione multifinestra di solito include le funzioni apri/chiudi, ridimensiona e scambia. La funzione apri/chiudi avvia/interrompe la funzionalità. La funzione ridimensiona consente di modificare le dimensioni della finestra. La funziona scambia consente di scambiare la posizione delle finestre.
Figura 3. Stili di finestre multifinestra
Nel 2013 sono emerse sul mercato diverse soluzioni, sviluppate da OEM/ODM, da fornitori di software indipendenti (ISV) e dalle comunità open-source. La tabella seguente compara le diverse soluzioni multifinestra.
Caratteristica | Cornerstone | Standout | Xposed | Tieto |
---|---|---|---|---|
Descrizione | Framework multi-tasking per il sistema operativo Android* | Android* Una libreria open source utilizzabile per creare app fluttuanti | Un'applicazione multifinestra che supporta finestre ancorate | Il progetto mira a creare un'esperienza utente simile a quella desktop |
Apri/chiudi, ridimensiona, ingrandisci al massimo | Supportato | Supportato | Supportato | Supportato |
Stile finestra | Ancorata | Fluttuante | Ancorata | Ancorata/Fluttuante |
Modifica codice | Framework Android | Strato applicazione | Framework Android | Framework Android |
Supporto applicazione | Supporta tutte le applicazioni, ma SurfaceView non è regolabile dinamicamente | Alcune applicazioni assistenti, ad esempio, calcolatori, ecc. | Occorre migliorare la compatibilità e stabilità dell'applicazione | Supporta tutte le applicazioni |
Versione Android | Android 4.1 ~Android 4.4 | Android 4.1~ Android 4.4 | Android 4.4 | Android 4.4 |
Sito web ufficiale | http://www.onskreen.com | http://forum.xda-developers.com/showthread.php?t=1688531 | http://forum.xda-developers.com/xposed | https://github.com/tieto/multiwindow_for_android |
Architettura software
Potete modificare il codice del framework Android per adattare più funzioni. L'architettura del sistema operativo Android è divisa in strati.
Per Android 4.2 e Android 4.3, il programma di avvio e altre applicazioni vengono tutte eseguite in uno stack, chiamato “stack principale”. Come sappiamo, la multifinestra necessita di più stack per contenere più finestre, quindi ci occorre modificare la classe ActivityManagerService del framework per aggiungere la creazione dello stack e l'interfaccia di gestione dello stack. Per modificare la classe WindowManagerService del framework per adattare la visuale, dobbiamo modificare l'inputManager del framework per distribuire l'evento touch alle finestre corrispondenti.
La gestione dello stack è stata cambiata significativamente quando sono stati rilasciati Android 4.4 e Android 5.0. Il programma di avvio e le altre applicazioni possono essere eseguiti su stack diversi. Sono stati aggiunti stack e funzioni di gestione stack. Di seguito sono mostrate le differenze tra le revisioni Android.
Figura 4. Modifiche della gestione stack tra Android* 4.3 e Android 4.4
Concentriamoci su Android 5 nome in codice Lollipop. Come sappiamo, il sistema operativo Android* usa un metodo callback per attivare la funzione di interfaccia dell'attività. Ma la funzione principale viene realizzata sul framework, quindi introdurremo due classi importanti ActivityManagerService e WindowManagerService.
Figura 5. Struttura software di Lollipop
Gestione attività di Lollipop
Dato che la funzionalità multifinestra dipende dallo stack, quanto segue mostra come creare uno stack e come avviare un'attività su uno stack.
In Lollipop, IactivityManager.java ha aggiunto le seguenti funzioni di interfaccia.
Tabella 1.Modifiche del codice sorgente di Lollipop
IactivityManager.java aggiunta nuove funzioni di interfaccia | Descrizione |
---|---|
public void moveTaskToStack(int taskId, int stackId, boolean toTop) | Spostare l'attività su un altro stack |
public void resizeStack(int stackBoxId, Rect bounds) | Ridimensionare le dimensioni di stack |
public void setFocusedStack(int stackId) | Impostare il focus stack corrente |
Public Boolean isInHomeStack(int taskId) | ottenere l'attività se si trova in HomeStack |
Dopo l'avvio, il processo SystemServer avvierà i servizi di gestione dell'attività e i servizi di gestione della finestra. Possiamo aggiungere le frasi RuntimeException per tracciare il processo.
Figura 6. Progresso della creazione dello stack in Lollipop
Ora mostriamo come avviare un'attività su uno stack.
Figura 7. Avviare attività su uno stack
In lollipop, adb (android debug bridge) ha aggiunto i seguenti comandi.
Tabella 3. Nuovi comandi adb di Lollipop
COMANDI ADB | Funzione | Descrizione |
---|---|---|
Adb shell am stack start | Avvia una nuova attività su <DISPLAY_ID> tramite Intent | Kitkat 4.4, adb commands contain adb shell am stack create. Lollipop 5.0, adb commands adb shell am stack create deletion |
Adb shell am stack movetask | Sposta <TASK_ID> dallo stack attuale al di sopra o al di sotto di STACK_ID | Uso: adb shell am stack movetask task_id stackid true/false Nota: funziona su KitKat, ma non funziona su Lollipop. |
Adb shell am stack resize | Modifica le dimensioni e posizione di <STACK_ID> a <LEFT, TOP, RIGHT, BOTTOM> | Uso: adb shell am stack resize task_id weight |
Gestione finestra di Lollipop
WindowManagerService è il gestore di finestre principale. La sua funzione contiene invio di eventi input, layout schermo e gestione superfici.
Figura 8. Il ruolo di WindowManagerService nell'architettura grafica2
Alcune domande comuni su multifinestra
Multifinestra è dotato di una funzione di ridimensionamento. Abbiamo visto casi dove un'animazione di gioco non può essere ridimensionata. Il problema alla radice sta nel fatto che la funzione Android SurfaceFlinger non può regolare dinamicamente la dimensione.
Figura 9. I giochi che usano SurfaceFlinger non regolano dinamicamente le dimensioni della finestra
Un altro problema riguarda la non corretta visualizzazione di alcune applicazioni in multifinestra. Un esempio di seguito mostra il calcolatore non visualizzato correttamente in multifinestra perché l'applicazione usa una configurazione di compatibilità non corretta.
Figura 10.Calcolatore con configurazione non corretta
La prossima versione di Android supporterà il multifinestra?
Google inserirà la funzionalità multifinestra nella sua prossima versione del sistema operativo. Ho trovato le seguenti informazioni di log nel codice sorgente di Lollipop. Useremo il seguente comando per cercare nel log multifinestra.
git log --grep “multiwindow”
Il log contiene una stringa che dice “defer tap outside stack until multiwindows”. Quindi possiamo presumere che il multifinestra sarà sulla tabella di marcia di Google.
Figura 11.Il log di Lollipop su multifinestra
Caso di studio: Cornerstone
Onskreen ha sviluppato Cornerstone, la prima soluzione framework multifinestra. Destinato a dispositivi e tablet con schermo grande. Potete scaricare il codice sorgente da GitHub3. È supportato solo sulle versioni Android 4.1 e Android 4.2. Non è stato ancora rilasciato su versioni Android più recenti. Ma possiamo analizzare il codice sorgente di Android 4.2 per ottenere maggiori dettagli tecnici.
Figura 12. Modifiche di Cornerstone su Jelly Bean
Sommario
Molti dispositivi mobili ora utilizzano processori Intel® con sistema operativo Android. Gli sviluppatori come possono migliorare l'esperienza utente? Il loro prodotti come possono competere al meglio? Queste domande ci spingono costantemente a migliorare i nostri prodotti su dispositivi con architettura Intel® (IA). Multifinestra è una buona funzionalità che fa la differenza. È conveniente e consente ai consumatori di eseguire due o più cose contemporaneamente. Possono guardare un video e usare messaggistica istantanea con feedback video. Possono giocare a un videogioco e leggerne recensioni. Diversi dispositivi ora supportano la funzionalità multifinestra: Tablet Ramos i12, tablet Teclast x98 e Cube i7, che usa il sistema operativo Remix.
Figura 13.Multifinestra su dispositivi IA
Riferimenti
[1] http://www.onskreen.com/cornerstone/
[2] http://himmele.googlecode.com/svn/trunk/Google%20Android/Android%20Graphics%20Architecture.pdf
[3] https://github.com/Onskreen/cornerstone
Risorse
Informazioni sull’autore
Li Liang ha ottenuto il master in elaborazione di segnale e informazioni dalla Changchun University of Technology. È entrato in Intel nel 2013 come application engineer nel Reparto Relazioni Sviluppatori CCE (Client Computing Enabling). Si concentra sull'assistenza agli sviluppatori per differenziare le loro app su piattaforma Android.