我目前有一个服务,当我启动它时运行良好,但是当我尝试使用 stopService 方法停止它时,它的 onDestroy 方法不会被调用。
这是我用来尝试停止服务的代码
stop_Scan_Button = (Button)findViewById(R.id.stopScanButton);
stop_Scan_Button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Log.d("DEBUGSERVICE", "Stop Button pressed");
Intent service = new Intent(CiceroEngine. CICERO_SERVICE);
releaseBind();
Log.d("Stop_Scan_Button", "Service: " + service.toString());
stopService(service);
Log.d("Stop_Scan_Button", "Service should stop! ");
}
});
我认为使用 stopService 时调用 Service 的 onDestroy 方法是否正确?当我按下停止扫描按钮时,我的服务中的 onDestroy()
方法不会被调用。
我还有什么遗漏的东西要停止服务吗?
编辑:添加 onServiceConnected()
在 stopService 运行时调用而不是 onServiceDisconnected()
,为什么会发生这种情况?
编辑:添加有关绑定(bind)的更多信息
我在 onCreate() 方法中调用 bindService,然后让 releaseBind() 方法解除绑定(bind)服务。
这是该方法的代码:
public void releaseBind(){
unbindService(this);
}
所以我认为解除绑定(bind)不是我的问题?
最佳答案
我猜你有一个对 releaseBind()
的方法调用意味着你之前在这个服务上调用了 bindService()
并且 releaseBind( )
正在调用 unbindService()
。如果我的猜测不正确,请忽略此答案。
在所有 bindService()
调用都有相应的 unbindService()
调用后,服务将关闭。如果没有绑定(bind)客户端,那么当且仅当有人在服务上调用 startService()
时,该服务也需要 stopService()
。
所以,这里有几种可能性:
- 您仍然有绑定(bind)的客户端(例如,其他 Activity ),在这种情况下,您无法停止服务,直到它们解除绑定(bind)
- 由于
unbindService()
和stopService()
都是异步的,因此时间可能会出现问题,在这种情况下,如果您调用stopService()
来自您的ServiceConnection
的onServiceDisconnected()
方法
另外,请记住,服务被销毁的确切时间取决于 Android,可能不会立即生效。因此,例如,如果您依赖 onDestroy()
导致您的服务停止正在完成的某些工作,请考虑为此使用另一个触发器(例如,调用 stopDoingStuff( )
方法通过服务绑定(bind)接口(interface))。
关于android - 调用 stopService 方法时服务不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176375/