android thread Caricamento efficace dei dati in RecycleView



process and thread android (1)

La tua domanda è molto interessante e ci sono alcuni metodi per risolvere. Ho appena messo alcune soluzioni qui con riferimento.

1. Cache i tuoi dati

Quando l'utente scorre, l'adattatore interrogherà alcuni dati dalla matrice, dal database o dalla rete. A causa della tua prestazione lenta, suppongo che potrebbe essere un problema perché il tempo di caricamento dei dati è lungo. Quindi il metodo migliore per risolvere questo problema è il caching dei dati.

Puoi memorizzare nella cache i tuoi dati in memoria usando la classe LRUCache e su disco usando DiskLRUCache Esiste una linea guida Android per questo problema: Caching bitmap

Codice Psuedo:

if (memoryCache.get(key)) {
   // load data from memory and assign to cell
} else if (diskCache.get(key)) {
   // load data from disk and assign to cell
} else {
  // get data from database or network
  // assign to cell
  // save to memory cache
  // save to disk cache
}

2. Utilizzare thread diversi per caricare i dati

Quando si elabora un'attività a esecuzione prolungata sull'interfaccia utente, è necessario passare all'interfaccia utente e creare un nuovo thread per il proprio scopo. È possibile utilizzare Asynctask per questo scopo.

Il problema in questo metodo è: durante il caricamento dei dati dallo sfondo, la cella visualizzata sullo schermo dall'evento di scorrimento ha bisogno di dati diversi. Quindi, quando il vecchio oggetto asynctask ha finito il lavoro, assegna vecchi dati alla tua cella. BUMP !!! . Quindi devi controllare attentamente lo stato della tua cella. C'è un bel tutorial: Elabora immagine caricando in thread diversi

3. Semplifica la tua vista

Se non si utilizza qualcosa come la gestione del database, la richiesta di rete durante lo scorrimento, forse il problema è che la visualizzazione è troppo complessa. Dovresti utilizzare questo strumento: Hierarchy Viewer per verificare quale file di layout presenta problemi di prestazioni. Puoi anche utilizzare lo strumento Strumento di sovrascrittura GPU per verificare se molte parti sulla tua vista hanno disegnato molte cose inutili.

4. Rileva il tempo per l'aggiornamento della base dati sulla frequenza dei fotogrammi

Devi sempre mantenere la frequenza fotogrammi al di sotto di 60 fps. Con quel frame rate, l'utente non riconoscerà lag, clunky ... nella tua vista. Puoi utilizzare GPU Profiler per controllare la frequenza dei fotogrammi. Basandoti su quel frame rate, decidi che dovresti semplificare la visualizzazione, ottimizzare il metodo onDraw o ottimizzare GPU Drawing (a causa di un overdrawing) per mantenere il frame rate dell'interfaccia utente <= 60fps.

Tutti i metodi sopra elencati sono integrati nel mio progetto denominato ImageUploader . Questa applicazione carica l'immagine sul servizio Flickr e visualizza l'elenco di tutte le immagini caricate o visualizza le singole immagini.

Google ha caricato una serie di pattern di prestazioni Android per insegnarti molte cose utili come la cache, il batching, i consigli utili ...

Spero che questo aiuto :)

Sto compilando un elenco di dati e questi dati vengono caricati in 3 passaggi, quindi dopo che il primo passaggio è finito ho già mostrato i dati all'utente. Poi aggiorno l'interfaccia passo dopo passo ogni volta che lo stato di caricamento dei dati cambia ...

Uso un RecyclerView per visualizzare i miei dati. Potrei osservare che quando il caricamento dei singoli passaggi è molto veloce, l'interfaccia utente sta bloccando (specialmente quando l'utente sta scorrendo molto velocemente) ... Quindi ho bisogno di raggruppare gli eventi e aggiornare l'interfaccia ogni x ms. ..

Con i test che ho visto, l'aggiornamento dell'interfaccia utente ogni 150 ms sembra essere bello e veloce e non porta a nessuna balbuzie visibile.

Ma non sono sicuro di come reagiscono i vecchi dispositivi o altri dispositivi.

Qualcuno ha qualche esperienza in questa direzione e può dirmi quale valore sarebbe buono?

Domanda generale

Probabilmente la domanda può essere posta anche più in generale: quando si aggiorna l'interfaccia utente molto frequentemente, qual è la frequenza migliore da utilizzare per evitare di bloccare l'interfaccia utente? O qual è il tempo minimo di attesa prima di aggiornare nuovamente l'interfaccia utente





android-recyclerview