Domanda

Come si accede a un database di SQLiteDatabase in un thread separato (cioè: un AsyncTask) di un Activity e assicurarsi che si lascia sempre in uno stato di diritto

?

Se ho capito bene, il filo può essere ucciso in qualsiasi momento e il database potrebbe rimanere aperta, potenzialmente dando una IllegalStateException ( SQLiteDatabase creato e mai chiuso ) in un secondo momento.

Come si fa a trattare con questo?

È stato utile?

Soluzione

Se il AsyncTask è gestito dal vostro Activity, allora Activity può annullare AsyncTask nei tempi previsti (quando diventa vulnerabile ad essere ucciso da sistema operativo, ad esempio dopo Activity.onPause()) in modo AsyncTask.onCancelled() sarà chiamato in cui è possibile chiudere il DB.

Se il AsyncTask (o un Thread) non è gestita dal vostro Activity allora il vostro sono in difficoltà e dovrebbe prendere in considerazione riprogettare l'architettura.

Altri suggerimenti

Due modi:

  1. È possibile registrare un Runtime.addShutdownHook(..) e vicino database di lì.

  2. Crea Application personalizzato e implementare onLowMemory() in cui si chiude il database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top