¿Escritura simultánea en la base de datos de Android (desde múltiples servicios)?

Tengo un problema serio con la base de datos de Android sqlite y la escritura concurrente. Para mejores explicaciones, te daré un ejemplo de la vida real:

Tengo un widget de escritorio, donde muestro una lista de elementos de mi base de datos (y en segundo plano tengo DataService, que a intervalos regulares recopila datos nuevos de mi servidor remoto y actualizo mi base de datos con ellos). Entonces, cuando hago clic en algún elemento de la lista, necesito actualizar el elemento pulsado (= hacer operación de escritura) en la base de datos. PERO cuando hago clic en el elemento exactamente en el momento, cuando DataService está actualizando datos nuevos en mi base de datos, por supuesto registra un error como este:

android.database.sqlite.SQLiteException: error code 5: database is locked

Normalmente es difícil de simular, pero si programa u DataService para que se ejecute cada 10 segundos (solo como demostración), puede simular este error muy fácilmente.

Y mi pregunta es, ¿cómo manejar esto? Leí en los documentos, que si hay dos eventos de escritura al mismo tiempo, solo se ejecutará primero y luego se registrará un error. Suena extraño, debe haber otras opciones, por ejemplo, la segunda escritura esperaría hasta que finalice la primera escritura. ¿O tal vez otra solución? Intento leer documentos, pero parece que este elemento no está muy bien cubierto en los documentos de Google ... Casi toda la información que tengo, encontré en otras páginas que no sean oficiales.

PD: Esta es mi versión abreviada de mi clase DBHelper:

public class DBHelper extends SQLiteOpenHelper {

    private static final String TABLE_NEWS = "News";    
    private static final String COL_ID = "id";
    private static final String COL_TITLE = "title";
    private static final String COL_ALERT = "alert";

    public DBHelper(Context context) {
        super(context, "MY_DB_NAME", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NEWS + "(" + COL_ID + " TEXT PRIMARY KEY," + COL_TITLE + " TEXT," + COL_ALERT + " INTEGER" + ")");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NEWS);
        onCreate(db);
    }

    public void addRecords(ArrayList<NewsItem> items) {
        SQLiteDatabase db = this.getWritableDatabase();    
        for (int i = 0; i < items.size(); i++) {
            NewsItem item = items.get(i);    
            ContentValues values = new ContentValues();
            values.put(COL_ID, item.getId());
            values.put(COL_TITLE, item.getTitle());
            values.put(COL_ALERT, item.getAlertMe());    
            db.insert(TABLE_NEWS, null, values);
        }    
        db.close();
    }

    public int updateRecord(NewsItem item) {
        SQLiteDatabase db = this.getWritableDatabase();    
        ContentValues values = new ContentValues();
        values.put(COL_ALERT_ME, item.getAlertMe());
        int updated = db.update(TABLE_NEWS, values, COL_ID + " = ?", new String[] { item.getId() });
        db.close();    
        return updated;
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta