onPerformSync 在模拟器上调用但不在物理设备上调用

onPerformSync called on emulator but not physical device

我构建了一个帐户同步适配器以在本地通讯录中显示应用中的联系人。

存在提供账号的假认证器。帐户也可以同步

    ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
    ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);

此帐号显示在设备上的所有帐号中:

我尝试通过系统触发 onPerformSync - 从菜单中的设置按 'sync now' 并以编程方式:

public static void triggerRefresh() {
    Bundle b = new Bundle();
    b.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
    b.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
    Account account = AccountAuthenticatorService.GetAccount();

    if (ContentResolver.isSyncPending(account, ContactsContract.AUTHORITY)  ||
            ContentResolver.isSyncActive(account, ContactsContract.AUTHORITY)) {
        ContentResolver.cancelSync(account, ContactsContract.AUTHORITY);
    }

    ContentResolver.setIsSyncable(account, ContactsContract.AUTHORITY, 1);
    ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, true);
    ContentResolver.requestSync(
            account, // Sync account
            ContactsContract.AUTHORITY,authority
            b);
}

它在模拟器上运行良好,但在一些设备(索尼、三星)上它根本没有触发(我尝试在 onPerformSync 方法中记录 smth 但从未看到此日志)。

我试图找到这样的问题,但没有任何帮助,我无法强制调用 onPerformSync。

根据 syncAdapter,模拟器和设备之间的主要区别是什么?

终于找到问题的原因了:

onPerformSync 方法将永远不会被调用,直到你没有互联网连接。在一些设备和模拟器上有互联网连接,但在其他设备和模拟器上您无法触发此方法。