2012-12-01 1 views
9

Ho sviluppato e testato un'applicazione su Android 3.2, interagisce con il database SQLite e mostra i risultati sullo schermo. Non ho animazioni o niente di speciale. Quello che ho sono un sacco di ListViews per mostrare i dati all'utente.La mia app è diventata molto più lenta su Android 4.0

Il database per l'app è molto grande, con tabelle somo con più di 300k righe. Abbiamo cercato di utilizzare AsyncTask in ogni interazione con il database, ma ci sono alcuni punti che dobbiamo ancora ottimizzare le prestazioni.

Il problema è che la società ha aggiornato alcuni tablet su Ice Cream Sandwich e l'app è molto più lenta di quanto non fosse su Honeycomb. Ho caricato lo stesso codice, con lo stesso db, in due dispositivi, uno in esecuzione ICS e l'altro con Honeycomb. L'app ha funzionato molto meglio nel dispositivo 3.2. Ho anche provato a usare <uses-sdk android:minSdkVersion="14" /> ma non è andata meglio.

C'è qualcosa che potrei fare per ottimizzare le prestazioni sul 4.0? Mi piacerebbe anche sapere perché questo è successo e se c'è qualcosa che potrebbe aver causato ciò (alcuni componenti o classi che non funzionano così bene su 4.0).

Grazie!

UPDATE: Ho trovato la soluzione per la schermata principale della mia app. Presentavo un frammento che funzionava come un elenco orizzontale, era un HorizontalScrollView che caricava un enorme elenco di dati e creava molto LinearLayout da presentare all'interno di ScrollView. Ho trovato un widget di HorizontalListView e l'ho usato per caricare la mia lista. Questo ha reso l'app più veloce. Ma non ho trovato la risposta al motivo per cui è stato più lento su ICS.

Ho anche provato a profilare l'app, ma è una cosa molto difficile da fare, ci sono molte informazioni. Probabilmente lo farò ancora nelle prossime settimane per velocizzare l'applicazione. Grazie per tutte le risposte e i commenti!

+0

Hai controllato le dimensioni dell'heap utilizzando gli strumenti DDMS su entrambi i dispositivi? – Talha

+3

Prima di saltare alle conclusioni, dovresti [profilo della tua app] (http://developer.android.com/tools/debugging/debugging-tracing.html) su entrambi i dispositivi, controlla dove si trova il collo di bottiglia. – Felix

+1

L'ho chiesto perché, ho già affrontato lo stesso problema. Quindi la dimensione heap di dalvik vm è impostata sul file delle preferenze /system/build.prop su ogni versione/dispositivo Android. La chiave di preferenza esatta è dalvik.vm.heapsize. Il valore è in megabyte e dipende dalle capacità del dispositivo. Per questo motivo la tua app può comportarsi in modo diverso su dispositivi diversi. – Talha

risposta