2012-07-12 4 views
5

Questo titolo può sembrare un po 'pazzo, ma questo è ciò che mi rende confuso. La mia app utilizza pesantemente operazioni di database locali. Come suggerito nei documenti di Android e in alcuni blog, ho esteso la classe SQLiteOpenHelper e definito tutte le operazioni di DB lì. Poiché alcune delle operazioni DB eseguite nei thread, l'apertura e la chiusura del db causano alcuni IllegalStateExceptions. Quindi, ho creato l'helper DB come Singleton e ho risolto questi problemi, eliminando anche le operazioni open e close per ogni azione DB. Ora tutto sembra funzionare bene anche se non chiudo mai il DB.Cosa accadrebbe se non chiudessi il database in Android?

  • La mia confusione è che è necessario chiudere DB?
  • Se sì, qual è il posto giusto per farlo, è in onDestroy dell'attività principale o da qualche altra parte?
  • Se non chiudo DB, quali sono gli effetti collaterali?

risposta

0

È possibile catturare IllegalStateException se si tenta di aprire nuovamente lo stesso database.

Se si crea l'istanza di DBHelper nel metodo onCreate dell'attività principale, sarebbe scrivere per chiudere db in onDestroy. Quindi, puoi star sicuro che la prossima volta nel onCreate il tuo database non è già aperto.

Se si dispone di riferimento a DBHelper in servizio, che deve essere aperto e chiuso in servizio e non in attività.

È inoltre possibile utilizzare Application classe per l'apertura di db, ma di quello che sarà aperta ogni volta che si app inizio (ad esempio quando si riceve BroadcastReceiver)

0

Il motivo per cui si ottiene eccezioni è che si sta cercando di scrivere/leggere dallo stesso database tramite fili diversi.

Credo che il posto migliore per chiudere il database sia all'interno dello onDestroy() del mainActivity.

0

Ho affrontato lo stesso problema. Ho aperto il database, eseguo qualche operazione e mi dimentico di chiudere. Di solito ho visto alcune eccezioni che il logcat è "Leak found" db è aperto e mai chiuso.

Problemi correlati