La pipeline di rendering 2D di Android supporta l'accelerazione hardware, il che significa che tutte le operazioni di disegno eseguite sul canvas utilizzano la GPU. A causa dell'aumento delle risorse necessarie per attivare l'accelerazione hardware, la tua app consumerà più RAM.
L'accelerazione hardware è attivata per impostazione predefinita. Se la tua applicazione utilizza solo composable standard, l'attivazione globale 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 chiamate di disegno personalizzate. I problemi si manifestano in genere come elementi invisibili, eccezioni o pixel visualizzati in modo errato. Per risolvere questo problema, Android ti offre la possibilità di attivare o disattivare l'accelerazione hardware a più livelli. Vedi Controllare l'accelerazione hardware.
Se la tua applicazione esegue disegni personalizzati, testala su dispositivi hardware reali con l'accelerazione hardware attivata per rilevare eventuali problemi. La sezione Supporto delle operazioni di disegno descrive i problemi noti relativi all'accelerazione hardware e come risolverli.
Consulta anche OpenGL con le API Framework.
Controllare l'accelerazione hardware
Puoi controllare l'accelerazione hardware ai seguenti livelli:
- Applicazione
- Attività
- Finestra
- Componibile
Livello di applicazione
Nel file manifest Android, aggiungi il seguente attributo al tag
<application> per attivare l'accelerazione hardware per l'intera
applicazione:
<application android:hardwareAccelerated="true" ...>
Livello di attività
Se la tua applicazione non si comporta correttamente con l'accelerazione hardware attivata
a livello globale, puoi controllarla anche per le singole attività. Per attivare o disattivare l'accelerazione hardware a livello di attività, puoi utilizzare l'attributo android:hardwareAccelerated per l'elemento <activity>. L'esempio
seguente abilita l'accelerazione hardware per l'intera applicazione, ma
la disabilita per un'attività:
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
Livello della finestra
Se hai bisogno di un controllo ancora più granulare, puoi attivare l'accelerazione hardware per una determinata finestra con il seguente codice:
window.setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
)
Livello componibile
In Compose non esiste un'opzione per composizione per disattivare l'accelerazione hardware.
Per eseguire il rendering di un componibile nel proprio livello, utilizza Modifier.graphicsLayer. In questo modo, le proprietà di trasformazione (come alpha, scaleX, scaleY, translationX, translationY, rotationX, rotationY, rotationZ e transformOrigin) cambiano senza eseguire nuovamente il codice di disegno del componibile. Per ottenere le prestazioni migliori, utilizza sempre la forma lambda del modificatore per impostare queste proprietà.