如何取消SyncAdapter同步过程? ContentResolver.cancelSync()不会取消它。
我需要它,因为我将一千个联系人(在onPerformSync()中)从应用程序同步到Android联系人簿(调用ContentResolver.requestSync())。当我要执行新同步时,我需要取消当前同步。
要再次检查ContentResolver.cancelSync()不会取消同步,我已下载BasicSyncAdapter。用
替换onPerformSync()@Override
public void onPerformSync(Account account, Bundle extras, String authority,
ContentProviderClient provider, SyncResult syncResult) {
for (int i = 0; i < 20; i ++) {
if (i == 10) {
ContentResolver.cancelSync(GenericAccountService.GetAccount(ACCOUNT_TYPE), FeedContract.CONTENT_AUTHORITY);
}
Log.i(TAG, "count " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
因此10点以后必须停止,但它记录所有20点。
谢谢!
答案 0 :(得分:2)
AbstractThreadedSyncAdapter
的文档中有一节有关取消:
通过在同步线程上发出Thread.interrupt()来取消同步。您在onPerformSync(Account,Bundle,String,ContentProviderClient,SyncResult)中的代码必须检查Thread.interrupted(),或者您必须重写onSyncCanceled(Thread)/ onSyncCanceled()中的一个(取决于适配器是否支持同步)。多个帐户)。如果您的适配器不遵守框架发出的取消操作,则可能会导致应用程序的整个过程被杀死。