Creating a Sync Adapterを始め、SyncAdapterについて解説している記事では、AbstractThreadedSyncAdapterのサブクラスのコンストラクタで、

public SyncAdapter(Context context, boolean autoInitialize) {
  super(context, autoInitialize);
  mContentResolver = context.getContentResolver();
}

ContentResolverを取得してプライベートなメンバ変数として保持するのがセオリーとしていることが多いです。

しかし、onPerformSync()の呼び出しを見ると、

provider = mContext.getContentResolver().acquireContentProviderClient(mAuthority);
if (provider != null) {
  AbstractThreadedSyncAdapter.this.onPerformSync(mAccount, mExtras, mAuthority, provider, syncResult);
} else {
  syncResult.databaseError = true;
}

このタイミングでContentResolverを取得し、さらにContentProviderClientを獲得してonPerformSync()の引数に渡してくれます。コンストラクタでContentResolverを保持するより、引数providerを利用してContentProviderを操作した方が効率的なように思えます。

引数providerを利用しないのには、何か意味があるのでしょうか?