Android: SQLite + SharedPreferences, 2 hilos ¿Lectura / escritura simultánea?
Tengo dos partes de un programa (la aplicación real y un BroadcastReceiver) que posiblemente podrían intentar conectarse y modificar una base de datos SQLite y un archivo SharedPreferences.
1) Sé que puede hacer múltiples conexiones a una sola base de datos SQLite. También leí que SQLite puede "bloquear" la base de datos cuando intenta modificar o leer desde una base de datos (ACTUALIZAR, INSERTAR, etc.), entonces, ¿cómo manejo adecuadamente el caso donde 2 hilos intentan modificar / leer una sola base de datos SQLite en ¿al mismo tiempo?
En este momento, tengo este fragmento de código en el código / clase de conexión de mi base de datos:
private SQLiteDatabase myDatabase;
public boolean insert(ContentValues columnValueMap) throws Exception
{
long result = 0;
int attempt =0;
do
{
if(!myDatabase.isDbLockedByOtherThreads() && !myDatabase.isDbLockedByCurrentThread())
{
synchronized (myDatabase)
{
result=myDatabase.insertOrThrow(TABLE_NAME, TEXT, columnValueMap);
if(result ==0 || result == -1)
{
return false;
}
return true;
}
}
else
{
Thread.sleep(50);
}
attempt++;
}while(attempt<=5);
throw new Exception("Database Locked!");
}
2) ¿Debo preocuparme también por el acceso simultáneo a un archivo SharedPreferences (no importa qué subproceso tenga acceso primero, solo me preocupan los errores)?
Gracias.
[EDITAR] Cambio propuesto
public boolean insert(ContentValues columnValueMap) throws Exception
{
long result = 0;
synchronized (myDatabase)
{
result=myDatabase.insertOrThrow(TABLE_NAME, SMS_TEXT, columnValueMap);
if(result ==0 || result == -1)
{
return false;
}
return true;
}
}