我是一个初学者,他制作了一个简单的程序来展示服务是如何工作的。
.....
toStartService = new Intent(this, SimpleService.class);
sc = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(MoreService.this, "SC: Binded", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Toast.makeText(MoreService.this, "SC: Unbinded", Toast.LENGTH_SHORT).show();
}
};
startService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MoreService.this, "Starting Service", Toast.LENGTH_SHORT).show();
startService(toStartService);
}
});
stopService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(toStartService);
}
});
bindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if((isBound = bindService(toStartService, sc, BIND_AUTO_CREATE))) {
}
}
});
unbindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isBound) {
unbindService(sc);
isBound = false;
}
}
});
}为什么不传递sc变量(在bindService()上)调用sc.onServiceConnected()方法?密码有什么问题吗?
我满足了以下条件:
为什么bindService创建的服务在未绑定时被销毁?我尝试用startService启动服务,但它不能绑定。
帮帮我,如果我错了,很抱歉。
发布于 2010-09-25 03:31:54
这是所有这些方法的设计行为。例如,在根据bindService(Intent service, ServiceConnection conn, int flags)的文献资料方法中,只有在调用上下文存在时,服务才会运行:
只有在调用上下文存在的情况下,系统才会考虑需要该服务。例如,如果此上下文是已停止的活动,则在该活动恢复之前,将不需要该服务继续运行。
对于unbindService (ServiceConnection conn),文档说:
断开与应用程序服务的连接。当服务重新启动时,您将不再接收呼叫,并且现在允许服务在任何时候停止。
在文档中,它说:
使用
startService()覆盖由bindService(Intent, ServiceConnection, int)管理的默认服务生存期:它要求服务在调用stopService(Intent)之前保持运行状态,而不管是否有客户端连接到它。请注意,对startService()的调用并不是嵌套式的:无论您调用startService()多少次,对stopService(Intent)的单个调用都会停止它。
https://stackoverflow.com/questions/3792344
复制相似问题