对bindService的标志使用0或BIND_AUTO_CREATE

Che*_*eng 15 android

通过引用bindService(Intent服务,ServiceConnection conn,int标志)

我想知道,我们什么时候应该使用0 flags,什么时候应该要我们用BIND_AUTO_CREATEflags?该文档没有解释标志0的含义是什么.

使用0作为的示例 flags

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

使用BIND_AUTO_CREATEas的示例flags

mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"),
                             mServiceConn, Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)

Sou*_*rma 13

对于方法bindService(Intent, ServiceConnection, flag),如果flag = Context.BIND_AUTO_CREATE使用的话会绑定service并启动该服务,但如果"0"使用,方法将返回true,并喜欢将无法启动服务,直到调用startService(Intent)由开始的service.其中一个常见用途"0"是,如果该服务正在运行,则连接到本地服务的活动,否则您可以启动该服务.

  • Context.BIND_AUTO_CREATE不启动服务,它只创建它. (8认同)
  • 你确定你说的部分_但如果使用"0",方法将返回true并且不会启动service_?文档声明_Returns:如果您已成功绑定到该服务,则返回true; 如果未建立连接则返回false,因此您将不会收到服务对象._ (6认同)
  • 当您传递“0”并且服务尚未启动时会发生什么?`bindService` 返回什么? (2认同)

d4v*_*idi 10

在语义上,BIND_AUTO_CREATE如果您绑定到一个服务,只要服务器绑定到该服务,该服务的生命周期才有效.那是因为所有客户都没有退出的那一刻,它就会崩溃.

不要使用BIND_AUTO_CREATE- 或者我应该改写:BIND_AUTO_CREATE如果你真的只是暂时绑定到一个服务来查询或控制它,那么使用就没有意义了,这项服务在你完成之后会继续存在是合理的. .对于这些情况,绑定用于建立连接,并且应该使用startService()stopService()(或stopSelf()在某些情况下)管理服务的生命周期.

谷歌在绑定服务的文档中清楚地描述了后一种情况的一个常见例子:

"...例如,音乐播放器可能会发现允许其服务无限期运行并提供绑定很有用.这样,活动可以启动服务播放一些音乐,即使用户离开,音乐也会继续播放然后,当用户返回应用程序时,活动可以绑定到服务以重新获得对回放的控制."

总的来说,我会说使用该标志确实区分了两种非常不同类型的用例,而不是同一事物的微调版本.