Возможно, лучше всего перейти по маршруту Async для всех ваших действий ContentProvider. Я знаю, что это может быть больно, но считайте это:
Ваша простая однострочная вставка, которая обычно занимает несколько миллисекунд, должна ждать завершения большей транзакции. Может быть, вы заняты в SyncAdapter, делая много вещей? Ваша маленькая крошечная вставка внезапно занимает гораздо больше времени и может даже вызвать ANR.
Я знаю, что это очень низкий шанс, но шанс все еще там. Гораздо лучше просто принять шаблонный код и получить с него ;-)
Пример шаблонный код для вставки в классе деятельности:
private class UpdateHandler extends AsyncQueryHandler {
private final WeakReference<YourActivityClass> mActivityRef;
public UpdateHandler(YourActivityClass activity, ContentResolver cr) {
super(cr);
mActivityRef = new WeakReference<>(activity); // do a weak reference incase the update takes ages and the activity gets destroyed during
}
@Override
protected void onUpdateComplete(int token, Object cookie, int result) {
super.onUpdateComplete(token, cookie, result);
YourActivityClass exampleActivity = mActivityRef.get();
if (exampleActivity != null) {
exampleActivity .onUpdateCompleted(token);
}
}
}
public void saveStuffToDatabase() {
// do some stuff like show a progress bar or whatever
// actually do the update operation
new UpdateHandler(this, getContentResolver()).startUpdate(
0, // this will be passed to "onUpdatedComplete" in the updateHandler
null, // so will this!
uri,
values
);
}
private void onUpdateCompleted(int token) {
// this runs in the main thread after the update you started in saveStuffToDatabase() is complete
}
вы можете использовать '' CP' без AQH', но вы не можете использовать 'AQH' без' CP' – pskink