コンテンツ プロバイダーと同じくらい簡単にサービスと対話する方法はありますか?
たとえば、私たちが持っているコンテンツ プロバイダーでgetContentResolver()
は、Context
. クロスプロセス呼び出し ( ) の詳細についても心配する必要はありませんContentProvider
。
サービスでは、それらをバインドし、接続が確立されるのを待ってから、メモリをリークしたくない場合はバインドを解除する必要があります。さらに悪いことに、リモート サービス用のAIDLに対処する必要があります。
この例を取る:
ファイルダウンローダーモジュールがあります。現在、コンテンツ プロバイダーまたはサービスの 2 つのアプローチがあります。すべての新しいダウンロードを開始するには、両方にとって簡単です。
- サービス:
startService()
。コンテキストが必要なだけです。 - コンテンツ プロバイダー:
getContentResolver()
新しいダウンロードをそのキューに挿入します。また、コンテキストが必要です。
しかし、ダウンロードの進行中に、いくつかの情報 (平均速度、完了率など) を取得したいと考えています。ここに問題があります。コンテンツ プロバイダーとの通信はより簡単です。ここでも、コンテキストが必要で、必要な情報を照会するだけです。サービスの場合は、バインド、バインド解除、または独自の AIDL を構築する必要があります (リモート サービスの場合)。</p>
私がこの質問をしている理由は、上記の例では、サービスは、少なくともその名前からして、コンテンツ プロバイダーよりも適切なアプローチであるように思われるからです。
ありがとう、