1

私はAbstractThreadedSyncAdapterを使用して、Androidの携帯電話からの一部のデータをサーバーと同期しています。ユーザーが電話のアプリケーションでログインすると、最初の同期を実行して、ユーザーが私のアプリケーションでの作業を開始する前に、電話ですべてのデータを準備できるようにします。eclipseのエミュレーターでテストしましたが、正常に動作しますが、電話でテストすると、関数onPerformSyncを呼び出すのに時間がかかりすぎます(1分以上など)。

これは、オーセンティケーターアクティビティで使用するコードです。

        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

(フィルタリングせずに)完全なログを調べたところ、アプリケーションの実行中にエラーや警告は発生しませんでしたが、別の同期が行われていることがわかりました(音楽、カレンダーなど)。これが問題になる可能性がありますか?

2つの異なるROM(2.3.6 JVUと現在はICS)でテストしましたが、同じです。なぜこれが起こるのか誰かが知っていますか?

PD:今、私はログアウトでも同じことが起こるのを見ました(ユーザーがログアウトするときに同期を実行します)、そして電話はonPerformSyncが呼び出されるのを5分間待っていました)。

4

1 に答える 1

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あなたを助けると思う

于 2012-08-13T13:11:14.077 に答える