Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用0或BIND_AUTO_CREATE for bindService';s旗_Android - Fatal编程技术网

Android 使用0或BIND_AUTO_CREATE for bindService';s旗

Android 使用0或BIND_AUTO_CREATE for bindService';s旗,android,Android,指 我可以知道吗,我们应该在什么时候使用0作为标志,什么时候应该在标志上使用BIND\u AUTO\u CREATE?文档没有解释0对于标志的含义 使用0作为标志的示例 使用BIND\u AUTO\u CREATE作为标志的示例 对于方法bindService(Intent,ServiceConnection,flag)如果使用flag=Context.BIND\u AUTO\u CREATE,它将绑定服务并启动服务, 但如果使用了“0”,则方法将返回true,并且在调用startService

我可以知道吗,我们应该在什么时候使用0作为
标志
,什么时候应该在
标志
上使用
BIND\u AUTO\u CREATE
?文档没有解释0对于标志的含义

使用0作为
标志的示例
使用
BIND\u AUTO\u CREATE
作为
标志的示例

对于方法
bindService(Intent,ServiceConnection,flag)
如果使用
flag=Context.BIND\u AUTO\u CREATE
,它将绑定
服务
并启动服务, 但如果使用了
“0”
,则方法将返回true,并且在调用
startService(Intent)
以启动
服务之前不会启动服务。

“0”
的一个常见用法是,如果某个活动要连接到本地服务,则该服务正在运行,否则您可以启动该服务。

从语义上讲,如果您要绑定到一个服务,而该服务的生存期仅在客户端绑定到该服务时有效,请使用
绑定自动创建。这是因为当所有客户机都从中解除绑定时,它就会下降

不要使用
BIND\u AUTO\u CREATE
——或者我应该换一句话:如果您只是为了查询或控制某个服务而临时绑定到该服务,那么使用
BIND\u AUTO\u CREATE
是没有意义的,并且该服务在您完成后仍然存在是合理的。对于这些情况,绑定用于建立连接,服务的生命周期应该使用
startService()
stopService()
(在某些情况下,也可以使用
stopSelf()
)进行管理

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

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


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

您确定您所说的但如果“0”使用时,方法将返回true且不会启动服务?文档状态返回:如果您已成功绑定到服务,则返回true;如果未建立连接,则返回false,因此您将不会收到服务对象。Context.BIND_AUTO_CREATE不启动服务,它只创建服务。当您通过
0
且服务尚未启动时会发生什么情况?
bindService
返回什么?
// Start auto complete service.
autoCompleteServiceIntent = new Intent(AutoCompleteService.class.getName()); 
startService(autoCompleteServiceIntent);
bindService(autoCompleteServiceIntent, serviceConnection, 0);
mContext.bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"),
                             mServiceConn, Context.BIND_AUTO_CREATE);