Nella mia app devo implementare alcuni servizi di interfaccia utente e sincronizzazione. Viene eseguito in background e aggiorna i dati. Il servizio di sincronizzazione non è molto semplice, utilizza il multithreading.E riguardo il multithreading in Android SQLite?
Quindi, ecco la mia storia: Quando ho iniziato a sviluppare questa app non sapevo nulla di sqlite, quindi non ho usato alcuna sincronizzazione dei thread in Java. Risultato: ho ricevuto molte eccezioni come "SQLiteException: database bloccato: BEGIN EXCLUSIVE;"
Quindi ho sincronizzato tutte le mie transazioni con il normale blocco Java sincronizzato() {}. Tutto è andato molto meglio. Ma ho usato i cursori per l'implementazione di CursorAdapter per le mie liste. Così, a volte stavo ottenendo lo stesso "SQLiteException: database è bloccato: BEGIN EXCLUSIVE;"
Ho terminato la creazione di un'utilità sqlite sicura per piccoli thread che gestisce tutta la roba thread-safe. Inoltre devo usare qualcosa come ArrayAdapter (leggi tutti i dati dal Cursore e chiudilo dopo aver letto, sincronizza anche questo blocco) per la mia interfaccia utente. Quindi, funziona OK
Ma, non mi piace tale modo di gestire l'interfaccia utente, perché l'interfaccia utente è molto più lento con questa soluzione: leggere una certa quantità di dati dal cursore è piuttosto veloce, ma è più lento rispetto all'utilizzo di CursorAdapter
Quindi, chi ha trovato la soluzione per questa domanda? Grazie
In che senso l'interfaccia utente ha più lento? Ci vuole più tempo per rispondere a tocchi ecc, o solo più tempo per visualizzare i dati del database? Se stai leggendo il tuo database allora non usare le transazioni - questo ti permette di eseguire più letture dal DB in una sola volta. –
@Joseph Earl Intendevo "più tempo per visualizzare i dati". e sì, non uso le transazioni quando leggo i dati. Li uso solo quando scrivo alcuni dati –