2012-09-20 13 views
9

SyncAdapterを複数の権限のために再利用したいと思います。メソッド onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)は、パラメータとして権限を渡します。しかし、どうすればこのように登録できますか?1つのSyncAdapterクラスを複数の権限に使用する方法は?

私はAndroidManifest.xmlをして次のように開始:

<service 
    android:name=".sync.SyncService" > 
    <intent-filter> 
     <action android:name="android.content.SyncAdapter" /> 
    </intent-filter> 

    <meta-data 
     android:name="android.content.SyncAdapter" 
     android:resource="@xml/syncadapter1" /> 
</service> 

私は成功せず@xml/syncadapter2を登録するさまざまな方法を試してみました。任意のアイデアは、各権限の派生SyncAdapterクラスなしで達成するために?

答えて

9

この質問はヶ月前に提起されましたが、私は

onPerformSync()が新しいSyncThreadが同期操作を実行するためにスピンアップされたときに呼び出され...とにかくお答えしたいと思います。各SyncAdapterはsync-adapter.xmlで定義された権限にバインドされたSyncThreadをスピンアップし、このxmlファイルでは複数の権限を定義できません。

AbstractThreadedSyncAdapter(SyncAdapterスーパークラス)は、複数の権限を処理するために作成されたものではありません。これには、シングルトンとして実装されたISyncAdapterImplクラスが含まれています。したがって、startSync()が呼び出されるたびに、同じ権限を使用して同期が行われます。

また、最初にSyncService内に追加のメタデータとして@xml/syncadapter2を追加しようとしていましたか?これは、複数のSyncAdaptersを1つのSyncServiceに登録するのと同じです。 (サービスタグ内に複数のメタデータタグを定義できるので)技術的には可能ですが、OS自体が同期を実行するときにOS上でservice.onBind(Intent intent)というサービスを呼び出すことになり、渡すインテントを簡単に制御できません。あなたがそれを制御できたら、インテントのバンドルにキーを入れて、登録したどのsyncAdapterをバインドするかを決定します。それでも、それは難しいようです。

これらのことは、それぞれの権限(独自のサービスも含む)ごとに異なるSyncAdaptersを実装し、同様の操作をonPerformSync()で呼び出されるUtilityクラスに抽象化することはあまりありません。この戦略は、いずれにしてもContentProviderの1つを削除する必要があれば、対応するSyncAdapterおよびSyncServiceを削除する方が簡単になるため、長期的には維持管理が容易です。

1

これは正解ではありませんか。

  1. onBindは、同期アダプタが関連付けられている権限とは関係ありません。これは、呼び出し側がサービスと通信するために使用するインタフェースを返すだけです。
  2. (インターフェイスを提供する)サービス実装は、同期する権限が何であるかを理解する責任があります。これは電話onPerformSyncで行われます。
  3. AbstractThreadedSyncAdapterから派生した実装は、すべての同期に対して呼び出される可能性があるため、スレッドセーフでなければなりません。

「不可能」ではなく、サービスの正しい実装についてです。 1つのサービスに複数の同期アダプタを実装することは、権限で実装を切り替えるだけで複数のアダプタを登録するのと同等です。

+0

私はこれをkianatennysonが作成した回答に追加しました。何らかの理由で私は彼女の答えにコメントを追加することはできません。 – LeonidVlad

+0

寄付いただきありがとうございます。十分な評判がない限り、他の人の投稿にコメントをつけることはできません(50) –

関連する問題