2

AccountManagerに多数のアカウントがあり、新しいアカウントを追加すると、Android はすべてのアカウントの同期を開始します。それらがたくさんあるので、同期を開始するのに少なくとも 15 秒かかります。

新しいアカウントを追加するときにすべてのアカウントの同期を停止/キャンセルする方法はありますContentResolver.requestSyncか? その時点で自分のアカウントのみを呼び出して同期を開始できますか?

ありがとう、

アレクサンダル・イリッチ。

4

1 に答える 1

2

同期はバックグラウンド サービスとして意図されています。15 秒は、特に新しいアカウントの追加 (すべきか?) が非常にまれなイベントである場合に、同期の開始前に完全に妥当な遅延のように思えます。もう 1 つの考えは、アクティブなアカウントが12 個ある場合、その数を減らす方法を考えようとするかもしれないということです。一度に複数のアカウントのサイト?

初めてのセットアップの応答性について心配していますか、または実際にアカウントを頻繁に追加および削除する必要があるユースケースがありますか?
後者の場合はContentResolver.setIsSyncable()、特定のコンテンツ/アカウントのペアのオンとオフを切り替えるだけに注目してください。false の場合、アカウント ページのチェックボックスはグレー表示され、同期は行われません。アカウントを作成して破棄するよりも、そのほうがニーズを満たす場合があります。

つまり、スピードアップを試すことができます。

  1. ContentResolver.requestSync (Account account, String authority, Bundle extras) ContentResolver で定義されたエクストラ値を手動で呼び出して確認します。試しSYNC_EXTRAS_MANUALてみてくださいSYNC_EXTRAS_EXPEDITED

  2. より極端なケース (失敗するとユーザーを本当に怒らせる可能性があります...) は、マスター同期の現在の状態を保存してから、明示的にマスター同期を無効にし (ContentResolver.setMasterSyncAutomatically(boolean sync))、 sync を使用しSYNC_EXTRAS_MANUALて上書きし、同期が完了したらマスター同期を初期状態に復元します。

問題はそれを行う方法です...アプリのアカウント作成コードからそれを開始する必要があると思います。

于 2011-07-01T13:28:32.840 に答える