gpt4 book ai didi

android - 如何知道同步何时完成?

转载 作者:IT老高 更新时间:2023-10-28 21:48:15 25 4
gpt4 key购买 nike

我已经实现了一个同步适配器,我想在它完成我的 Activity 时得到一个回调。我试过使用 ContentResolver.addStatusChangeListener ,但我只在同步挂起/Activity 时收到回调。以下是我 Activity 中的一些相关代码:

@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) 状态更改来刷新我的数据,但这似乎真的丑陋的。有什么想法吗?

最佳答案

我找到的一个解决方案是完全放弃 ContentResolver,并实现我自己的广播。基本上,将其添加到同步适配器中,在 onPerformSync 的末尾:

Intent i = new Intent(SYNC_FINISHED);
sendBroadcast(i);

还有这个在 Activity 中:

@Override
protected void onResume() {
super.onResume();
registerReceiver(syncFinishedReceiver, new IntentFilter(DataSyncService.SYNC_FINISHED));
}

@Override
protected void onPause() {
super.onPause();
unregisterReceiver(syncFinishedReceiver);
}

private BroadcastReceiver syncFinishedReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
Log.d(Const.TAG, "Sync finished, should refresh nao!!");
}
};

这似乎工作得很好,但是我希望在 SDK 中找到一些在同步完成时直接通知我的东西。

关于android - 如何知道同步何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com