La mia app cambia le proprietà di alcune viste veramente semplici (rotazione, traduzione) per fotogramma. Ho usato systrace, come consigliato dagli articoli sulle prestazioni di Android, per verificare se stavo rilasciando i frame.Riduzione delle prestazioni dell'animazione Android quando il dispositivo rimane fermo ma viene toccato
È venuto fuori qualcosa di davvero inaspettato. Quando il dispositivo era fermo (anche se toccavo lo schermo) l'utilizzo della CPU era più alto, gli avvisi su systrace si avvicinavano e la porzione rossa del profiler di rendering GPU era più lunga. Quando ho ruotato o scosso il dispositivo molto velocemente, tutto era OK.
Di seguito sono riportati i collegamenti dei risultati. Shake
è quando ho ruotato i dispositivi molto velocemente, no_shake
è quando è stato lasciato seduto sulla mia scrivania.
Ho realizzato un'app di prova davvero semplice che utilizza un'unica animazione di traduzione: source code.
Guardando lo systrace scossa, in cui il frame-rate è liscia, perché HW_VSYNC_0 e HW_VSYNC_ON_0 linee non hai dati? Come posso leggere la frequenza della CPU (ho abilitato l'opzione durante l'acquisizione della traccia).
Per quanto riguarda il problema, la mia teoria era che il dispositivo potesse abbassare la frequenza della CPU. Come posso leggere questo in systrace? Ho usato un'app di terze parti per verificare questa ipotesi ed è vero come mostrato di seguito. Quindi, cosa posso fare per evitare questo problema?
Perché il dispositivo facendo questo? All'inizio pensavo che il dispositivo utilizzasse i dati dell'accelerometro per capire se non veniva usato e quindi ha ridotto la frequenza della CPU. Ma, per aumentare la frequenza della CPU, devo scuotere il dispositivo molto duramente. Tenendolo come una persona normale non aumenterebbe la frequenza della CPU.
So che ci sono un sacco di domande, ma dopo aver letto tutti gli articoli relativi alla pipeline grafica Android, sono fuori di idee.
Il problema si è verificato su un Sony Xperia Z3 con sistema operativo Android 5.1 il problema non era riproducibile su un Nexus 5 con sistema operativo Android 6.
Aggiornamento
Sembra che il problema di prestazioni è causato dalla CPU/Regolazione della GPU. Lo stesso dispositivo, Xperia Z3, con Android 4.4, anche se riduce la velocità di clock, funziona meglio secondo Systrace. Inoltre, non aumenta la velocità quando si agita.
Per quanto riguarda il gesto di scuotimento necessario per aumentare la velocità della CPU, ho notato che quando provo a ruotare il dispositivo da verticale a orizzontale o viceversa, l'orologio della CPU aumenta in trigger (anche se l'app non cambia orientamento). Quindi, penso che il motivo per cui questo gesto è monitorato sia il è quello di accelerare un possibile cambio di orientamento.
[Snapdragon 810 s * ck male ... ecco perché:)] (http://arstechnica.com/gadgets/2015/ 04/in-depth-with-the-snadragon-810s-heat-problems /) – Selvin
Nexus 5 Snapdragon 800 non presenta questo problema. Non so se questo problema è legato alla versione Android, all'OEM o ad altro .. – Petrakeas
forse è stato riparato ora (nel 6 o nel kernel più recente) ... Continuo a scommettere sul passaggio da "grande" a "piccolo" "core in snapdragon – Selvin