Параллельная запись в базу данных Android (из нескольких служб)?

У меня серьезная проблема с базой данных andlq sqlite и одновременной записью. Для лучшего объяснения приведу пример из жизни:

У меня есть виджет рабочего стола, на котором я показываю список элементов из моей базы данных (и в фоновом режиме у меня есть DataService, который через регулярные промежутки времени собирает свежие данные с моего удаленного сервера и обновляет мою базу данных с ними). Итак, когда я нажимаю на какой-либо элемент в списке, мне нужно обновить выбранный элемент (= сделать операцию записи) в базе данных. НО, когда я нажимаю на элемент точно в момент, когда DataService обновляет свежие данные в моей базе данных, он, конечно, регистрирует ошибку, подобную этой:

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

Обычно это сложно смоделировать, но если вы планируете запуск DataService, например, каждые 10 секунд (только для демонстрации), вы можете смоделировать эту ошибку очень легко.

И мой вопрос, как справиться с этим? Я прочитал в документах, что если есть два события записи в одно и то же время, будет выполнено только первое, второе будет записано как ошибка. Звучит странно, должны быть другие варианты, например, вторая запись будет ждать до завершения первой записи. Или, может быть, другое решение? Пытаюсь читать документы, но кажется, что этот элемент не очень хорошо описан в документах Google ... Почти все, что у меня есть, я нашел на официальных страницах.

PS: Это моя сокращенная версия моего класса 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;
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос