Как узнать, когда синхронизация завершена?

Я реализовал адаптер синхронизации и хочу получить обратный вызов, когда он завершится в моей деятельности.Я пробовал использовать ContentResolver.addStatusChangeListener , но я получаю обратные вызовы только тогда, когда синхронизация ожидает / активна. Вот некоторый соответствующий код из моей деятельности:

@Override
protected void onResume() {
    super.onResume();
    final int mask = ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE | ContentResolver.SYNC_OBSERVER_TYPE_PENDING;
    syncObserverHandle = ContentResolver.addStatusChangeListener(mask, syncStatusObserver);
}

@Override
protected void onPause() {
    super.onPause();
    if (syncObserverHandle != null) {
        ContentResolver.removeStatusChangeListener(syncObserverHandle);
        syncObserverHandle = null;
    }
}

private SyncStatusObserver syncStatusObserver = new SyncStatusObserver() {

    @Override
    public void onStatusChanged(int which) {
        AccountManager am = AccountManager.get(TodosActivity.this);
        Account a = am.getAccountsByType(Const.ACCOUNT_TYPE)[0];

        Log.d(Const.TAG, "Sync status changed: " + which);

        if (!ContentResolver.isSyncActive(a, DataProvider.AUTHORITY) &&
                !ContentResolver.isSyncPending(a, DataProvider.AUTHORITY)) {
            Log.d(Const.TAG, "Sync finished, should refresh nao!!");
        }
    }
};

Однако if в методе onStatusChanged никогда не действует. Я взял этот пример из демонстрации JumpNote , где он работает, вероятно, потому, что он также вызывается вручную в onResume () , поэтому он, вероятно, никогда не вызывается системой когда синхронизация закончится. Или это так, и я что-то не так делаю? Вот что я получаю в logcat:

D/MYAPP (10903): Sync status changed: 2
D/MYAPP (10903): Sync status changed: 2
D/MYAPP (10903): Sync status changed: 4
D/MYAPP (10981): --> DataSyncAdapter.onPerformSync()
D/MYAPP (10981): <-- DataSyncAdapter.onPerformSync()
D/MYAPP (10903): Sync status changed: 4

Итак, похоже, что я мог полагаться на второе изменение статуса SYNC_OBSERVER_TYPE_ACTIVE (4), чтобы обновить мои данные, но это кажется действительно некрасиво. Есть идеи?

31
задан Felix 8 July 2011 в 09:13
поделиться