Ho sofferto di questo problema per mesi e mesi (ma ora sono in fase di ottimizzazione delle prestazioni). Tuttavia, ora ho un disperato bisogno di sapere perché il mio adattatore sente che è necessario eseguire bindView
fino a 4 volte su un disco.Personalizzazione dell'adattatore del cursore che chiama bindView più volte
Ho un adattatore del cursore personalizzato che popola un gridview.
Alcuni di debug per mostrare ciò che sta succedendo:
03-08 14:46:47.980: I/AdapterCursorGrid(20724): newView()
03-08 14:46:48.470: I/AdapterCursorGrid(20724): bindView()
03-08 14:46:48.570: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:48.570: I/AdapterCursorGrid(20724): bindView() Record Id: 1
03-08 14:46:48.570: I/AdapterCursorGrid(20724): bindView() Cursor Position: 0
03-08 14:46:48.570: I/AdapterCursorGrid(20724): bindView() View Type: 0
03-08 14:46:48.570: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:48.600: D/AdapterCursorGrid(20724): bindView() Avatar empty...
03-08 14:46:48.690: D/AdapterCursorGrid(20724): bindView() Picture creation...
03-08 14:46:49.490: I/AdapterCursorGrid(20724): bindView()
03-08 14:46:49.501: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:49.501: I/AdapterCursorGrid(20724): bindView() Record Id: 1
03-08 14:46:49.501: I/AdapterCursorGrid(20724): bindView() Cursor Position: 0
03-08 14:46:49.501: I/AdapterCursorGrid(20724): bindView() View Type: 0
03-08 14:46:49.501: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:49.521: D/AdapterCursorGrid(20724): bindView() Avatar empty...
03-08 14:46:49.521: D/AdapterCursorGrid(20724): bindView() Picture creation...
03-08 14:46:50.320: I/AdapterCursorGrid(20724): newView()
03-08 14:46:51.170: I/AdapterCursorGrid(20724): bindView()
03-08 14:46:51.180: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:51.180: I/AdapterCursorGrid(20724): bindView() Record Id: 1
03-08 14:46:51.180: I/AdapterCursorGrid(20724): bindView() Cursor Position: 0
03-08 14:46:51.190: I/AdapterCursorGrid(20724): bindView() View Type: 0
03-08 14:46:51.190: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:51.190: D/AdapterCursorGrid(20724): bindView() Avatar empty...
03-08 14:46:51.200: D/AdapterCursorGrid(20724): bindView() Picture creation...
03-08 14:46:51.870: I/AdapterCursorGrid(20724): bindView()
03-08 14:46:51.896: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:51.896: I/AdapterCursorGrid(20724): bindView() Record Id: 1
03-08 14:46:51.900: I/AdapterCursorGrid(20724): bindView() Cursor Position: 0
03-08 14:46:51.900: I/AdapterCursorGrid(20724): bindView() View Type: 0
03-08 14:46:51.900: I/AdapterCursorGrid(20724): --------------------------
03-08 14:46:51.900: D/AdapterCursorGrid(20724): bindView() Avatar empty...
03-08 14:46:51.900: D/AdapterCursorGrid(20724): bindView() Picture creation...
Il "Avatar vuoto ..." e "la creazione di immagine ..." è semplicemente di debug che mi dice che è l'elaborazione e l'aggiornamento 2 particolari ImageView
s .
Perché o perché bindView
si esegue così tante volte? Quali sono le ragioni di questo e cosa posso fare per risolvere questo?
Logicamente parlando mi aspetto che bindView
venga eseguito una sola volta (e una volta ogni volta che si aggiorna la scheda), ho sbagliato a pensarlo?
Qualunque sia "creazione Picture" è * non * dovrebbe essere sul thread dell'applicazione principale. 'bindView()' deve tornare in meno di 1 ms su un 'GridView', indipendentemente dal fatto che si ritenga che venga chiamato troppe volte per altri motivi. ** Spendere ~ 600 ms in "Creazione immagine" è pessimo **. Anche se 'bindView()' è stato chiamato solo una volta per cella, sarebbe chiamato MxN volte (righe M, colonne N) quando il 'GridView' è inizialmente popolato, il che significa che * l'interfaccia utente è bloccata per diversi secondi * all'inizio . – CommonsWare
@CommonsWare Sì, lo otterrò con un'attività a sincronizzazione. – HGPB