私のアプリケーションは SyncAdapter 機能を実装していて、定期的な同期を定義していないとしましょう。このようなシナリオでは、いつ同期が行われますか? 最初に考えられるシナリオは、ローカルの ContentProvided/データベース コンテンツの変更です。サーバーの変更について教えてください。SyncAdapter はそれをどのように認識しますか?
9711 次
1 に答える
32
定期的な同期設定がない場合、コードがContentResolver.requestSync(Account account, String authority, Bundle extras)
アカウントと権限を明示的に呼び出すと、同期が行われます。
また、ContentProvider の挿入または更新または削除関数が を呼び出すContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork)
場合、bool syncToNetwork が true (デフォルト) の場合は、同期もトリガーされます。ここでは、データベース変更のバッチが変更ごとに 1 回ではなく、1 回の同期のみを引き起こすようにするために、短い遅延が発生します。notifyChange
UI が反映しているコンテンツが変更された後、Android が UI を更新するように通知する方法であるため、コードを呼び出す必要があることに注意してください。
サーバー データベースが変更されても、同期が行われないため、アプリはそれを認識しません。2 つのオプション:
- 定期的な同期を使用します。 サーバー API が etags または if-modified-since http ヘッダーを実装して、同期するデータをフィルタリングし、更新のみがダウンするようにすると、これはよりクリーンになります。
- C2DM (Cloud 2 Device Messaging)基本的には Android 向けのプッシュ通知です。いくつかのサーバー コンポーネントが必要です -- デバイス ID をサーバー上のアカウントに関連付けます。サーバーが変更された場合は、デバイスに明示的にメッセージを送信して、更新するように指示する必要があります。これは、Android を具体的にサポートするためのサーバー上でのカスタム コード作業ですが、時間を費やすと、それは素晴らしいことです。C2DM は、次の 10 分間の定期的な同期ではなく、受信トレイに到着してから 10 秒後に Android が gmail をデバイスに表示する方法です。また、取得する新しいデータがあることがわかっている場合にのみラジオをオンにして同期するため、バッテリー効率も向上し
于 2011-04-04T13:16:54.333 に答える