Quantcast
Channel: Опыт пользователя и дизайн
Viewing all articles
Browse latest Browse all 360

Uso della funzionalità multifinestra come differenziazione su Android*

$
0
0

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.

CaratteristicaCornerstoneStandoutXposedTieto
DescrizioneFramework multi-tasking per il sistema operativo Android*Android* Una libreria open source utilizzabile per creare app fluttuantiUn'applicazione multifinestra che supporta finestre ancorateIl progetto mira a creare un'esperienza utente simile a quella desktop
Apri/chiudi, ridimensiona, ingrandisci al massimoSupportatoSupportatoSupportatoSupportato
Stile finestraAncorataFluttuanteAncorataAncorata/Fluttuante
Modifica codiceFramework AndroidStrato applicazioneFramework AndroidFramework Android
Supporto applicazioneSupporta tutte le applicazioni, ma SurfaceView non è regolabile dinamicamenteAlcune applicazioni assistenti, ad esempio, calcolatori, ecc.Occorre migliorare la compatibilità e stabilità dell'applicazioneSupporta tutte le applicazioni
Versione AndroidAndroid 4.1 ~Android 4.4Android 4.1~
Android 4.4
Android 4.4Android 4.4
Sito web ufficialehttp://www.onskreen.comhttp://forum.xda-developers.com/showthread.php?t=1688531http://forum.xda-developers.com/xposedhttps://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.

Stack management changes between Android* 4.3 and Android 4.4

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 interfacciaDescrizione
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.

Progress of stack creation in Lollipop

Figura 6. Progresso della creazione dello stack in Lollipop

Ora mostriamo come avviare un'attività su uno stack.

Start activity on a 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 ADBFunzioneDescrizione
Adb shell am stack startAvvia una nuova attività su <DISPLAY_ID> tramite IntentKitkat 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 movetaskSposta <TASK_ID> dallo stack attuale al di sopra o al di sotto di STACK_IDUso: adb shell am stack movetask task_id stackid true/false
Nota: funziona su KitKat, ma non funziona su Lollipop.
Adb shell am stack resizeModifica 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.

WindowManagerService role in the graphics architecture

WindowManagerService role in the graphics architecture 2

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.

Games using SurfaceFlinger can’t dynamically adjust the windows size

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.

Calculator with bad configuration

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.

Lollipop log about multi-window

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.

Cornerstone modifications on Jelly Bean

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.

 

Multi-window feature on IA devices

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

http://www.customizeblogging.com/2015/04/android-6-0-muffin-concept-video-shows-multi-windows-quick-reply-feats.html

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.

  • Multi-Windows for app
  • Loolipop window management
  • Android*
  • Android*
  • Опыт пользователя и дизайн
  • URL

  • Viewing all articles
    Browse latest Browse all 360

    Trending Articles



    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>