Gestione del database con 2 processi

Ho un’applicazione che ha 2 parti.

  • Un servizio che crea contenuti.
  • Un’applicazione che utilizza il contenuto

Ognuno di questi viene eseguito come processi diversi. Il problema è che entrambi condividono un database. E ottengo spesso errori di blocco del database, sia quando il servizio tenta di scrivere qualcosa che l’interfaccia utente sta leggendo i dati. Anche viceversa. Come andare su questo?

  • La class utilizzata per accedere a DB è una class singleton. Ma dal momento che sia l’interfaccia utente sia il servizio sono 2 processi diversi, ci sono 2 singleton che presumo. Quindi questo non aiuta.
  • Anche la synchronise non mi aiuterà, perché ancora una volta a causa di 2 diversi processi.
  • Content Providers possono essere un’opzione, ma dal momento che utilizzo query complesse per scavare informazioni, sarebbe davvero difficile utilizzarle.

Come ottengo i due processi condividono il database. Ogni suggerimento sarebbe molto apprezzato.

L’utilizzo di un fornitore di contenuti è un’opzione. Un altro è dare un’occhiata a Berkeley DB . L’ API SQL di BDB è compatibile con SQLite e il gestore di blocco BDB consente a più thread e / o processi di leggere / scrivere contemporaneamente nel database.

chiudere la connessione dopo ogni operazione

cattura l’errore bloccato del database e prova a riconnetterti dopo 50ms

oppure lasciare che il servizio gestisca il database e l’attività richieda il servizio per i dati

potrebbe esserci isDatabaseInUseMethod?

È necessario utilizzare un provider di contenuti per incanalare le query del database attraverso un’unica fonte. All’interno del fornitore di contenuti è ansible utilizzare qualsiasi meccanismo di blocco che si desidera assicurarsi di non avere accesso concorrente. Potresti anche pensare di usare osservatori di contenuti per coordinare le azioni di servizio con le modifiche al database.

Quello che segue è un ottimo articolo su come funziona il locking con SQLite su Android e su cosa tenere a mente: http://kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html

Penserei che troverai alcune risposte lì 🙂