Autore Topic: Caricamento lento della view principale  (Letto 350 volte)

Offline volpesfuggente

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    KitKat 4.4.2
Caricamento lento della view principale
« il: 27 Maggio 2014, 11:02:04 CEST »
0
Ho realizzato un'app che carica da remoto alcuni contenuti multimediali.
Nella main_view ci sono 3 ImageView, 2 TextView ed 1 VideoView che vengono popolate dai contenuti remoti.
L'aggiornamento di queste View avviene mendiante interrogazione di un DB remoto, che in base alla query impostata e ad altri parametri, restituisce l'URL del contenuto multimediale (immagini, testo e video appunto).
Quello che accade è che al caricamento dell'app, dopo lo splash screen, devo attendere un tempo variabile, nell'ordine dei secondi, in cui la schermata è completamente bianca, dopodiché compare la main_view popolata con tutti i contenuti remoti. Vorrei cercare un modo per velocizzare il caricamento dell'app.
L'algoritmo di aggiornamento era inizialmente inserito in un UI_Thread che veniva invocato ogni N secondi.
Dopo aver consultando la documentazione, ho pensato che forse l'approccio migliore era quello di gestire le interrogazioni al DB mediante un Thread normale ed una volta che ho ricevuto tutti gli url, andare ad aggiornare tutte le view con un UI_thread, o un View.post(Runnable...).
In questo modo il caricamento sembra leggermente più veloce, anche se ora le singole View vengono aggiornate a caso, può accadere infatti che una in particolare ci metta anche 2 o 3 secondi prima di mostrare il contenuto desiderato. Anche in questo modo però, devo attendere un tempo secondo me troppo elevato tra la scomparsa dello Splash screen e la comparsa della nuova view.

Quale potrebbe essere l'approccio migliore?  Qualche consiglio?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Caricamento lento della view principale
« Risposta #1 il: 27 Maggio 2014, 11:41:46 CEST »
0
Io farei in modo da popolare le View con una qualche thumbnail locale, poi in uscita dalla OnCreate lanci i thread che poi andranno a popolare le View con i contenuti prelevati dalla rete.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline volpesfuggente

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    KitKat 4.4.2
Re:Caricamento lento della view principale
« Risposta #2 il: 27 Maggio 2014, 11:45:25 CEST »
0
Io farei in modo da popolare le View con una qualche thumbnail locale, poi in uscita dalla OnCreate lanci i thread che poi andranno a popolare le View con i contenuti prelevati dalla rete.

Ho fatto così, ma per qualche motivo, c'è sempre una certa attesa tra la scomparsa dello splash screen e l'apertura della main view.
E' come se il caricamento della view fosse rallentato da qualcosa...

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Caricamento lento della view principale
« Risposta #3 il: 27 Maggio 2014, 11:52:00 CEST »
0
E' come se il caricamento della view fosse rallentato da qualcosa...

Potresti (non volendo) eseguire delle operazioni nell'UI-thread. Controlla bene.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline volpesfuggente

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    KitKat 4.4.2
Re:Caricamento lento della view principale
« Risposta #4 il: 28 Maggio 2014, 16:21:36 CEST »
0
Si, a quanto pare c'erano ancora delle operazioni lente nell'UI Thread.
Ho provato a disabilitare tutto e in effetti il caricamento è più snello.
In particolare era rimasto abilitato il controllo se un servizio in background è attivo (e per farlo deve ciclare su tutti i service attivi e se sono molti un po' ci vuole), inoltre effettuava il buffering di un flusso audio e questo impatta moltissimo.
Purtroppo dovrò fare un refactoring piuttosto importante per spostare quelle operazioni in altri Thread.

Posterò la soluzione finale funzionante (se la trovo  :-P)