SyncAdapter仅同步一次

时间:2015-09-09 16:00:12

标签: android android-syncadapter

我的同步适配器出了很大问题。 在第一步中,我想每次调用同步,恢复一个特殊的活动(非常低效,我知道,但它仅用于测试)。 当我在启动应用程序后第一次调用ContentResolver.requestSync(从Android Studio安装,用户数据可用)时,它会调用我的onPerformSync方法。 但是后来当我调用requestSync时,从未调用过onPerformSync方法。这是我每次触发同步时调用的代码:

public void updateContent(Activity activity) {
    final Account account = APIHelper.getInstance().getAccount();
    final Bundle bundle = new Bundle();
    bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
    bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);


    Context context = MyApp.getApplication().getApplicationContext();
    final AccountManager manager = AccountManager.get(context);
    if (account == null) {
       manager.addAccount(Constants.ACCOUNT_TYPE, "", null, null, activity, new AccountManagerCallback<Bundle>() {
            @Override
            public void run(AccountManagerFuture<Bundle> future) {
                try {
                    Bundle bnd = future.getResult();
                    final Account account1 = APIHelper.getInstance().getAccount();
                    ContentResolver.requestSync(account1, Constants.AUTH_PROVIDER_NAME, bundle);
                } catch (Exception e) {
                    Log.e(TAG, e.getLocalizedMessage());
                }
            }
        }, null);

    } else {
        ContentResolver.requestSync(account, Constants.AUTH_PROVIDER_NAME, bundle);

    }
}

当我检查Android中的帐户设置时,它表明同步正在进行中(动画同步符号正在转动并显示“正在进行同步”)。 我还注意到this帖子,试图在我的代码中添加它,但没有效果:

ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);

我尝试将其修改为每分钟同步的定期同步,但这也不起作用。

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题:在我的SyncAdapter中,我试图向UI发送Toast。我是通过处理程序完成的。这似乎打破了SyncAdapter。当我删除这个逻辑时,它可以工作。