【发布时间】:2011-07-08 09:13:00
【问题描述】:
我已经实现了一个同步适配器,我想在它完成我的活动时得到一个回调。我曾尝试使用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!!");
}
}
};
但是,onStatusChanged 方法中的if 永远无效。我从JumpNote demo 中提取了这个例子,它可能是因为它也在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) 状态更改来刷新我的数据,但这看起来真的很难看。有什么想法吗?
【问题讨论】: