58

bindServiceこれはばかげた質問かもしれませんが、 を使用するのが賢明な場合と を使用する場合を知りたいstartServiceです。

例えば:

を使用するbindServiceBIND_AUTO_CREATE、サービスが開始され、ここに書かれているように自動的に作成されます: http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

bindServiceいつ、いつ使用するのが賢明startServiceですか?この2つが本当によくわかりません。

4

2 に答える 2

97

通常bindService()、呼び出し元の component( ) が、 を介して、開始しようとしているActivityと通信する必要がある場合に使用します。と通信したくない場合は、just を使用できます。サービスとバインド サービスの違いを以下に示します。ServiceServiceConnectionServicestartService()

ドキュメントから:

開始

サービスは、アプリケーション コンポーネント (アクティビティなど) が startService() を呼び出してサービスを開始したときに「開始」されます。開始されたサービスは、それを開始したコンポーネントが破棄された場合でも、無期限にバックグラウンドで実行できます。通常、開始されたサービスは単一の操作を実行し、呼び出し元に結果を返しません。たとえば、ネットワーク経由でファイルをダウンロードまたはアップロードする場合があります。操作が完了すると、サービスは自動的に停止します。

バウンド

アプリケーション コンポーネントが bindService() を呼び出してサービスにバインドすると、サービスは「バインド」されます。バインドされたサービスは、コンポーネントがサービスとやり取りしたり、リクエストを送信したり、結果を取得したり、さらにはプロセス間通信 (IPC) を使用してプロセス全体でそれを行うことを可能にするクライアント サーバー インターフェイスを提供します。バインドされたサービスは、別のアプリケーション コンポーネントがバインドされている間だけ実行されます。一度に複数のコンポーネントをサービスにバインドできますが、すべてのコンポーネントがバインド解除されると、サービスは破棄されます。

ここで詳細を読むことができます: Android サービスバインドされたサービス

于 2012-12-09T13:15:39.053 に答える
26

私は@Ovidiu Latcuに同意しますが、1つの重要な注意があります.バインドされたサービスを使用する場合、サービスは、それを開始したアクティビティが終了したときに終了します(そのサービスにバインドされた唯一のアクティビティである場合)。

したがって、アプリがバックグラウンドにあるときにバックグラウンドでサービスを実行する場合 (たとえば、アクティビティが一時停止され、ユーザーには表示されない)、サービスにバインドせずにサービスを開始しBroadcastReceiver、たとえば次のように通信する必要があります。 .

于 2014-07-28T08:54:48.230 に答える