Per implementare l'accesso al database nella mia applicazione ho seguito Lars Vogel tutorial, ma io sono molto confuso su un paio di cose ...a qualche domanda sulla cursori database SQLite in Android
1) Ogni volta che una chiamata è fatto a fetchTodo
verrà creato e restituito un nuovo cursore. Lasciando il cursore precedente per il garbage collector. Quindi, se non uso startManagingCursor
o anche lo CursorLoader
per quella materia, dovrei chiamare un .close()
sul cursore quando ho finito con esso? Al di fuori di fetchTodo
portata del corso, ad esempio:
Cursor cursor = mNotesAdapter.fetchTodo();
// do something...
cursor.close();
ho finito con questo cursore e nuovo verrà creato sul prossimo recuperare, devo chiudere in questo modo, allora o dovrei lasciare per il garbage collector ? Anche se penso che sto parlando di 2 cose completamente diverse ... L'essere punto, dovrei chiuderlo come nell'esempio sopra o no?
2)Cursor
ha anche un metodo .deactivate()
e la documentazione dice che utilizza meno risorse (di cursori attivi). Quando esattamente dovrei usare questo? Ad esempio, nella mia app, ho uno ListActivity
che viene popolato attraverso un SimpleCursorAdapter
(l'inizializzazione del codice per questo viene chiamata solo una volta). Il cursore utilizzato è una variabile membro della classe, perché ne ho bisogno al di fuori del metodo che popola la lista. Ho bisogno di requery il database quando qualcosa viene cancellato da esso. Ma fino a quando non viene cancellato un record, che è un'azione dell'utente e potrebbe volerci un po 'di tempo, dovrei disattivare il cursore nel frattempo? Perché sarà di nuovo attivo quando chiamo di nuovo .requery()
. O il SimpleCursorAdapter
sta per smettere di funzionare perché il cursore non è attivo?
EDIT: Ho appena provato questo e ho scoperto che non posso chiamare deactivate()
dopo aver impostato l'adattatore del cursore. L'elenco sarà vuoto se il cursore non è attivo, quindi è necessario rimanere attivo fino a quando viene visualizzato ListActivity. Alla fine, dovremmo semplicemente lasciarlo gestire da StartManagingCursor
. O il nuovo CursorLoader
.
3) So che startManagingCursor
/stopManagingCursor
sono deprecati, ma io non sto mira a nido d'ape (almeno per il momento) e non voglio a che fare con il nuovo CursorLoader
per ora. Ma nel tutorial sopra, startManagingCursor
viene utilizzato ovunque, ma stopManagingCursor
non viene mai chiamato una volta. Perchè no? Android se ne occupa a suo modo? Qualsiasi situazione dovrei chiamare stopManagingCursor
?
# 1 Ho completamente interpretato erroneamente i miei pensieri su quella domanda, ho bisogno di riformularlo ... # 2 Sì, intendevo "disattivare" (errore). Non riesco davvero a trovare una buona documentazione su come usare il 'LoaderManager', nemmeno qui nelle domande SO.# 3 Capisco il punto, ma se non dovrei usare 'stopManagingCursor' se ho fatto una chiamata a' startManagingCursor', perché questo metodo esiste anche in primo luogo? –
Ho appena riscritto l'intera domanda # 1 @philipp, se potessi dare un'occhiata ... –
Inoltre, ho appena trovato la risposta al n. 2; domanda modificata ancora una volta con la risposta. –