SyncAdapter 只同步一次
SyncAdapter only syncs once
我的同步适配器有一个大问题。
第一步,我想每次都调用 sync,恢复一个特殊的 activity(非常低效,我知道,但它仅用于测试)。
当我在启动应用程序(从 Android Studio 安装,用户数据可用)后第一次调用我的 ContentResolver.requestSync
时,它会调用我的 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 中的帐户设置时,同步似乎正在进行中(动画同步符号正在转动并显示 "sync in progress"。
我也注意到 this post,试图在我的代码中添加它,但没有效果:
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
我尝试将其修改为每分钟同步一次的定期同步,但这也不起作用。
我终于解决了问题:在我的 SyncAdapter 中,我尝试向 UI 发送 Toast。我是通过处理程序完成的。这似乎破坏了 SyncAdapter。当我删除这个逻辑时,它起作用了。
我的同步适配器有一个大问题。
第一步,我想每次都调用 sync,恢复一个特殊的 activity(非常低效,我知道,但它仅用于测试)。
当我在启动应用程序(从 Android Studio 安装,用户数据可用)后第一次调用我的 ContentResolver.requestSync
时,它会调用我的 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 中的帐户设置时,同步似乎正在进行中(动画同步符号正在转动并显示 "sync in progress"。 我也注意到 this post,试图在我的代码中添加它,但没有效果:
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
我尝试将其修改为每分钟同步一次的定期同步,但这也不起作用。
我终于解决了问题:在我的 SyncAdapter 中,我尝试向 UI 发送 Toast。我是通过处理程序完成的。这似乎破坏了 SyncAdapter。当我删除这个逻辑时,它起作用了。