我的 SyncAdapter 遇到了一些稍微奇怪的行为。
第一次安装我的应用程序(使用 adb 卸载后),它会启动并创建一个帐户。根据某些语句的顺序(见下文),我的 SyncAdapter 的 onPerformSync() 将永远不会被调用;我的“帐户和同步”下的帐户显示“同步进行中”图标无限旋转。如果我随后取消选中我的应用帐户旁边的同步复选框,然后重新选中它,我的 onPerformSync() 会立即被调用。
这会导致我的 SyncAdapter 永远不会被调用。“同步进行中”图标永远旋转,除非我取消选中,然后重新选中同步复选框:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
mAccountManager.addAccountExplicitly(account, mPassword, null);
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
使用相同语句的这种顺序,一切都可以完美运行:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
mAccountManager.addAccountExplicitly(account, mPassword, null);
我的猜测是我将 SyncManager 置于某种不一致的状态,因为它会在创建帐户时立即触发同步请求,并且我正在更改它的配置。但是(几乎连贯的)文档没有提到在您喜欢时调用这些函数的任何问题。
作为其他与 SyncAdapters 苦苦挣扎的人,我发现除非你contentResolver.requestSync()
调用.SyncAdapter.onPerformSync()
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
有人可以解释这种行为吗?至少可以说,围绕帐户和同步的文档有些不清楚。
我在 2.1 模拟器上遇到这种行为,针对 2.1 SDK 进行编译。