第一次同步循环无限期

时间:2013-06-19 12:59:09

标签: android android-syncadapter

我遇到SyncAdapter的情况我不知道如何解决。

我正在使用定期同步。 onPerformSync方法只记录一些信息,让我知道该进程正在运行(没有调用内容提供者或其他任何内容的notifyChanges。)

该项目包含两个应用程序:第一个创建用户帐户(仅用于测试目的)。第二个包含同步适配器。请注意,这对于项目范围来说是完全合法的。

我首先使用该帐户安装该应用。 我可以看到帐户已创建。

然后我使用同步适配器安装应用程序,并在第一次运行同步挂起时。查看帐户同步设置后,微调器图标将持续运行,并且未注册任何日志消息(这意味着它无法访问onPerformSync)。

但是,我可以取消设置中的同步,然后同步过程开始正常工作。这意味着可以正确设置Account,Content Provider和SyncService之间的连接。

我知道添加/删除帐户会触发其他同步过程,因此在使用同步适配器安装应用之前,我需要花费很长时间。

有关为何发生这种情况的任何提示?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mAccountManager = AccountManager.get(this);
    // No worries here. The account exists and it's the one I want

    Account[] accounts = mAccountManager.getAccountsByType(Constants.ACCOUNT_TYPE);
    // Just first account for TESTING purposes
    if (accounts != null && accounts.length > 0)
        account = accounts[0];
    else {
        Log.e(TAG, "No accounts set!!");
        return;
    }

    // Set sync for this account.
    Bundle extras = new Bundle();
    extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
    extras.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
    extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);

    ContentResolver.setIsSyncable(account, authority, 1); // Mandatory since 3.1

    // Allows the provider to sync when internet connection is back
    ContentResolver.setSyncAutomatically(account, authority, true);


    // Add a periodic synchronization
    ContentResolver.addPeriodicSync(account, authority, extras, POLL_FREQUENCY);
}

修改

我发现在同步时调用取消,使其工作。不是最好的解决方案,但它现在解决了问题。我把这一行与“isFirstUse”标志结合起来。

ContentResolver.cancelSync(account, authority); 

0 个答案:

没有答案