Escrita simultânea para banco de dados android (a partir de vários serviços)?

Eu tenho um problema sério com banco de dados Android sqlite e escrita simultânea. Para melhores explicações, vou dar-lhe um exemplo da vida real:

Eu tenho um widget de desktop, onde eu estou mostrando uma lista de itens do meu banco de dados (e no fundo eu tenho DataService, que em intervalos regulares recolhe dados frescos do meu servidor remoto e atualizar meu banco de dados com eles). Então - quando eu clico em algum item na lista, eu preciso atualizar o item clicado (= fazer a operação de gravação) no banco de dados. MAS quando eu clico no item exatamente no momento, quando DataService está atualizando novos dados no meu banco de dados, é claro que ele registra um erro como este:

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

Normalmente é difícil simular, mas se você programar o DataService para ser executado, por exemplo, a cada 10 segundos (apenas para demonstração), você pode simular esse erro com muita facilidade.

E minha pergunta é como lidar com isso? Eu li em docs, que, se houver dois eventos de gravação ao mesmo tempo, apenas primeiro será executado, segundo será registrado como um erro. Parece estranho, deve haver outras opções, por exemplo, a segunda gravação esperaria até a primeira gravação terminar. Ou talvez outra solução? Tentando ler documentos, mas parece que este item não é muito bom coberto no google docs ... Quase todas as informações que eu tenho, eu encontrei em outras páginas que não oficiais.

PS: Esta é a minha versão abreviada da minha classe 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;
    }
}