29

Sto sviluppando un'applicazione che funziona in modo molto simile all'app nativa di Facebook Android: il social network che la maggior parte delle volte l'utente spende in un infinito ListView visualizzando molte immagini, inserendo una galleria di immagini e così via.Accelerazione hardware Android - da usare o non usare?

diciamo per la discussione che sto facendo tutte le cose giuste e le migliori pratiche Android per raggiungere scorrimento liscia (riciclaggio vista come dovrebbe, utilizzando diversi tipi di vista, se necessario, si carica in memoria le bitmap solo scalati nella dimensione necessaria , memorizzazione nella cache di bitmap, utilizzando il pattern di progettazione ViewHolder, non bloccando il thread dell'interfaccia utente quando è possibile e così via ...)

diciamo anche che ogni altra cosa nella mia app scritta nel modo migliore e seguendo le migliori pratiche (per il discussione ...: ->)

la mia app non funzionava affatto in quella fase, ma quando accendeva l'accelerazione hardware, come descritto e promesso in Android Developers documentationrendendo la mia app molto più semplice e veloce.

diciamo che non influisce in alcun modo nagative sulla UI come può accaduto, e non sto eseguendo una delle Unsupported Operations

secondo il documento di Google in materia, unico motivo che posso vedere non usare questa funzione (oltre a tutti gli altri motivi che ho già menzionato sopra) è che può far sì che la mia app utilizzi più RAM. ma quanta RAM? molto più? Lo so che quando la mia app consuma molta RAM, diventa un buon candidato per essere distrutto dal sistema operativo quando è necessario liberare memoria.

la mia domanda è fondamentalmente -

  • è vero "ok" sotto le circostanze per utilizzare questa funzione?
  • quali altri problemi possono sorgere dal suo utilizzo?

TIA

risposta

30

Per usare o non usare

Si consiglia di utilizzare l'accelerazione hardware solo se si dispone di calcoli personalizzati complessi per il ridimensionamento, la rotazione e la traduzione delle immagini, ma non usare per disegnare linee o curve (e altre operazioni banali) (source).

Se si prevede di avere transizioni comuni e anche se si è già considerato ridimensionamento, riciclo, memorizzazione nella cache, ecc., Potrebbe non avere più senso sovraccaricare il progetto. Inoltre, tutti gli sforzi spesi rielaborare il codice per supportare l'accelerazione hardware non effettuerà gli utenti sulle versioni inferiori a 3.0, che sono ~ 36% del mercato a partire dal 8 maggio 2013.

memoria

Per quanto riguarda l'utilizzo della memoria (secondo lo standard this article), includendo l'hardware Android l'applicazione carica i driver OpenGL per ogni processo, impiega circa 2 MB in memoria e lo incrementa a 8 MB.

Altre questioni

A parte le versioni API, presumo influirà anche la durata della batteria.Sfortunatamente non ci sono benchmark su diversi casi d'uso online per tracciare una linea su questo. Alcuni sostengono che in determinati casi a causa di più core gpu, l'utilizzo dell'accelerazione potrebbe far risparmiare tempo alla batteria. Nel complesso, penso che sarebbe sicuro che l'effetto non sarà troppo drammatico (o Google avrebbe fatto di questo un punto importante).

+0

grazie per la vostra risposta. hai scritto che la mia app non sarebbe compatibile con Android pr-honeycomb, ma penso che non sia vero: finché l'obiettivo è 11+ - puoi usare questa funzione, ma non farà nulla se l'app viene eseguita su piattaforma più vecchia. per ora mi upvoted solo la tua buona risposta e non l'accetto, perché mi piacerebbe avere la possibilità di ottenere più explentations .. –

+0

Secondo docs sviluppatori: A partire dal Android 3.0 (API di livello 11), il 2D Android pipeline di rendering è progettato per supportare meglio l'accelerazione hardware. Questo post potrebbe essere di aiuto per il supporto sotto il livello API 11 - http://stackoverflow.com/questions/16235637/hardware-acceleration-flag – Neil

+1

@TalKanel punto giusto, hai ragione - non produrrà incompatibilità, ho modificato la mia risposta di conseguenza –

10

UPDATE

L'accelerazione hardware è abilitato di default se il vostro target livello di API è> = 14


Direi di sì nella vostra situazione, l'accelerazione dell 'hardware.

Visto che non si stanno utilizzando controlli ad alta intensità di risorse nell'app, non dovrebbe essere un problema attivare l'accelerazione hardware. Come hai detto, la tua app funziona abbastanza bene senza l'accelerazione hardware.

Quando si abilita l'accelerazione hardware, Android inizierà a utilizzare la GPU e, a causa delle maggiori risorse necessarie per abilitare l'accelerazione hardware, l'app consumerà più RAM.


Una domanda frequente è sarà la quantità di aumentare la RAM da un davvero grande quantità?

La risposta a questa saranno tutti determinati dal:

. La tua abilità di programmazione, ad es. gestione della lista di riciclaggio, ridimensionamento delle immagini ect.

. The Device

Ho scritto un app qualche tempo fa che è stato usato per modificare bitmap ad alta risoluzione. Ho incontrato lo stesso problema. Ho rilevato che su diversi dispositivi la quantità massima di ram allocata dal sistema operativo quando è abilitata l'accelerazione hardware è variata dal dispositivo varia a seconda del dispositivo. Se il tuo dispositivo ha più RAM, il sistema operativo assegnerà più ram alla tua app, quindi non troverai mai una quantità costante di ram usata per la tua app. I dispositivi più grandi e costosi eseguiranno sempre la tua app su una quantità maggiore di ram.


Quali altri problemi possono aumentare utilizzando l'accelerazione hardware?

L'accelerazione hardware potrebbe causare problemi con alcune operazioni di disegno 2D. Se si verifica questo è possibile abilitare l'accelerazione hardware per le attività specifiche solo nella vostra applicazione, come indicato sul Hardware Acceleration post in the android Developer Docs

Il modo più semplice per abilitare l'accelerazione hardware è quello di accenderlo a livello globale per l'intera applicazione. Se l'applicazione utilizza solo viste standard e Drawable, attivarla globalmente non dovrebbe causare effetti di disegno negativi. Tuttavia, poiché l'accelerazione hardware non è supportata per tutte le operazioni di disegno 2D, l'attivazione potrebbe influire su alcune delle applicazioni che utilizzano visualizzazioni personalizzate o chiamate di disegno. I problemi di solito si manifestano come elementi invisibili, eccezioni o pixel resi in modo errato.Per rimediare a questo, Android ti dà la possibilità di abilitare o disabilitare l'accelerazione hardware ai seguenti livelli: applicazione, attività, Finestra, View

questo modo si può anche limitare l'accelerazione hardware nella vostra app ma dal suono di esso ne avrai bisogno per la maggior parte delle funzioni delle tue app.

Spero che questo aiuti

+0

+1 per approfondimenti sul diverso consumo di RAM su diversi dispositivi. @neil Hai qualche numero approssimativo da condividere come punto di riferimento generale? –

+0

Se dovessi scrivere i numeri ora mentirei! Non ho mai smontato le consistenze delle differenze di ram per dispositivo. So solo che la quantità di ram allocata da un dispositivo con 500 MB di RAM è notevolmente inferiore a un dispositivo con 1 GB di RAM. L'allocazione ram per l'app potrebbe anche essere influenzata da altre app in esecuzione in background e dalla quantità di ram disponibile, ma questa è un'ipotesi fatta da tutti. – Neil

Problemi correlati