質問: true; } ``` このタイミングで`ContentResolver`を取得し、さらに`ContentProviderClient`を獲得して`onPerformSync()`の引数に渡してくれます。コンストラクタで`ContentResolver`を保持するより、引数`provider`を利用して`ContentProvider`を操作した方が効率的なように思えます。 引数`provider`を利用しないのには、何か意味があるのでしょうか?
回答: 通常は `ContentProviderClient` を使えば良いです。 リンク先のコードのコメント(英語)にも書いてあるとおり、 `ContextResolver` は **必要ならば取る** べきものです。 ``` /* * If your app uses a content resolver, get an instance of it * from the incoming Context */ mContentResolver = context.getContentResolver(); ``` ですから、考えるべきなのは「`ContentProviderClient` を利用しない意味」ではなく「`ContentResolver` を利用する意味」、すなわち「どういう時に`ContentResolver` を使うのか」です。 この意味にはいくつか考えられるでしょうけれども、 そのうちの1つは両者の違いを考えれば明らかです。 `ContentProviderClient` は1つの `ContentProvider` へ高速にアクセスできるのに対し、 `ContentResolver` は遅くなるものの全ての `ContentProvider` へアクセスできます。 同期時に複数の `ContentProvier` からのデータが必要な場合には、 `ContentResolver` が必要になるのです。