Devo chiudere il cursore dopo ogni utilizzo o posso tenerlo aperto fino a quando la vista non viene distrutta?
Dipende. Se il risultato del cursore non cambierà nel frattempo (ad es. connessione remota che modifica il DB), allora è OK. Non dimenticare di usare CursorLoader
per fare in modo che Android gestisca automaticamente il cursore (ad es. chiudi il cursore se l'app si arresta in modo anomalo).
E lo stesso per il database, può essere aperto una volta creata l'attività che contiene questa vista e chiuso quando l'attività viene distrutta?
Sì, puoi aprire in onResume()
e chiudi in onPause()
richiamate o quando sai che il tuo database non verrà più interrogato.
Ricevo continuamente un errore 'close() non è mai stato chiamato esplicitamente nel database...' quando faccio come descritto sopra.
Questo è normale solo se l'app si arresta in modo anomalo. Non dovrebbe succedere se lo stai facendo come ho detto sopra.