20

bindService(Intent service、ServiceConnection conn、int flags)を参照する

いつ0を使用する必要があり、いつ使用する必要があるかを教えてくださいflags。ドキュメントでは、フラグの0の意味については説明されていません。BIND_AUTO_CREATEflags

0を使用する例flags

// Start auto complete service.
autoCompleteServiceIntent = new Intent(AutoCompleteService.class.getName()); 
startService(autoCompleteServiceIntent);
bindService(autoCompleteServiceIntent, serviceConnection, 0);

BIND_AUTO_CREATEとして使用する例flags

mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"),
                             mServiceConn, Context.BIND_AUTO_CREATE);
4

3 に答える 3

15

メソッドのbindService(Intent, ServiceConnection, flag)場合、flag = Context.BIND_AUTO_CREATEが使用されている場合は をバインドしserviceてサービスを開始しますが、"0"が使用されている場合、メソッドは true を返し、 のような呼び出しがstartService(Intent)を開始するまでサービスを開始しませんservice。の一般的な用途の 1 つは"0"、アクティビティがローカル サービスに接続する場合です (そのサービスが実行されている場合)。それ以外の場合は、サービスを開始できます。

于 2013-02-07T08:27:06.143 に答える
12

意味的には、BIND_AUTO_CREATE有効期間がクライアントがバインドされている間のみ有効なサービスにバインドする場合に使用します。これは、すべてのクライアントがバインドを解除した瞬間にダウンするためです。

使用しないでくださいBIND_AUTO_CREATE- またはおそらく言い換える必要があります: を使用しても意味がありませBIND_AUTO_CREATEん。サービスを照会または制御するために一時的にサービスにバインドしているだけであり、完了後もこのサービスが存続することが合理的である場合. そのような場合、バインディングは接続を確立するためのものであり、サービスのライフサイクルはstartService()and stopService()(stopSelf()場合によっては) を使用して管理する必要があります。

後者のケースの一般的に言及されている例は、バインドされたサービスに関するドキュメントで Google によって明確に説明されています。

「...たとえば、音楽プレーヤーは、サービスを無期限に実行できるようにし、バインディングも提供すると便利な場合があります。このようにして、アクティビティはサービスを開始して音楽を再生し、ユーザーが離れても音楽の再生を続けることができます。その後、ユーザーがアプリケーションに戻ったときに、アクティビティをサービスにバインドして、再生の制御を取り戻すことができます。」

全体として、フラグの使用法は、同じものの微調整されたバージョンではなく、2 つの非常に異なるタイプのユース ケースを実際に区別していると言えます。

于 2014-08-13T15:34:18.380 に答える