AbstractThreadedSyncAdapter-> onPerformSync需要花费太多时间来调用

时间:2012-07-16 09:57:12

标签: android synchronization

我正在使用AbstractThreadedSyncAdapter将Android手机中的某些数据与服​​务器同步。当用户使用手机的应用程序登录时,我执行第一次同步,以便用户在开始使用我的应用程序之前已准备好手机中的所有数据。我用eclipse的模拟器测试它并且工作正常,但是当我在手机上测试时,onPerformSync上的函数需要很长时间才能被调用(比如一分钟或更长时间)。

这是我在Authenticator Activity中使用的代码:

        Bundle params = new Bundle();
        params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
        ContentResolver.addPeriodicSync(account, "com.pfc.authority", params, 30);
        ContentResolver.setSyncAutomatically(account, "com.pfc.authority", true);

        ContentResolver.requestSync(account,"com.pfc.authority",params);

我的AbstractThreadedSyncAdapter的构造函数被称为非常快,但是我的应用程序仍在等待同步完成,就像我说onPerformSync函数需要太多时间才能启动,我不知道为什么我的手机也需要很久以后就可以了。

这是日志(我的应用程序已过滤)。我将Log.d放在构造函数和onPerformSyn函数中:

11:47:49 SweetSyncAdapter: constructor
11:48:01 SweetSyncAdapter: constructor
11:48:36 SweetSyncAdapter: onPerformSync

我查看了完整的日志(没有过滤它),并且在执行我的应用程序时没有错误或警告,但我看到还有另一个同步(音乐,日历等)。这可能是问题吗?

我用两个不同的ROM(2.3.6 JVU和现在的ICS)测试了它,它是一样的。有人知道为什么会这样吗?

PD:现在我看到注销时也是如此(我在用户注销时执行同步),并且手机已经等待5分钟等待onPerformSync被调用。

1 个答案:

答案 0 :(得分:1)

创建帐户后,我请求与以下行同步。

Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_FORCE, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
ContentResolver.requestSync(account, authority, bundle);

我认为SYNC_EXTRAS_FORCE会帮助你