调用stopService方法时,服务不会停止

Don*_*rty 25 service android

我目前有一个运行正常的服务,但是当我尝试使用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! ");

        }   
});
Run Code Online (Sandbox Code Playgroud)

我是否正确地认为当使用stopService时它会调用服务的onDestroy方法?当我按下停止扫描按钮时onDestroy(),我的服务中的方法不会被调用.

还有什么我错过了我应该停止服务吗?

编辑:添加onServiceConnected()在运行stopService时调用的调用onServiceDisconnected(),为什么会发生这种情况?

编辑:添加更多信息关于绑定

我在onCreate()方法中调用bindService,然后让releaseBind()方法取消绑定服务.

以下是该方法的代码:

 public void releaseBind(){
    unbindService(this);
  }
Run Code Online (Sandbox Code Playgroud)

所以我认为解除绑定不是我的问题?

Com*_*are 43

我猜你有一个方法调用releaseBind()意味着你以前调用bindService()过这个服务而且releaseBind()正在调用unbindService().如果我的猜测不正确,请忽略此答案.


所有bindService()呼叫都有相应的unbindService()呼叫后,服务将关闭.如果没有绑定的客户端,那么stopService()当且仅当有人呼叫startService()该服务时,该服务也将需要.

所以,这里有一些可能性:

  1. 您仍然有绑定的客户端(例如,其他活动),在这种情况下,您无法停止服务,直到他们解除绑定
  2. 由于这两个unbindService()stopService()是异步的,不是有什么事情失控与时间,在这种情况下,如果你打电话给你可以得到更好的运气会stopService()从你ServiceConnectiononServiceDisconnected()方法

另外,请记住,服务被销毁的确切时间取决于Android,可能不会立即生效.因此,例如,如果您依赖于onDestroy()使您的服务停止正在完成的某些工作,请考虑使用另一个触发器(例如,stopDoingStuff()通过服务绑定器接口调用方法的活动).

  • 嗯,那段代码完全搞砸了,几乎肯定会导致你的问题.`bindService()`和`unbindService()`是异步的,保证你使用它们的方式失败.不幸的是,我不知道你想在这里完成什么,所以我没有办法进一步建议你. (2认同)

JRL*_*JRL 10

你的所有绑定都关闭了吗?

服务可以以两种方式使用.这两种模式并不完全分开.您可以绑定到使用startService()启动的服务.例如,可以通过使用标识要播放的音乐的Intent对象调用startService()来启动背景音乐服务.只有在以后,可能当用户想要对播放器进行一些控制或获取有关当前歌曲的信息时,活动是否会通过调用bindService()建立与服务的连接.在这种情况下,stopService()实际上不会在最后一个绑定关闭之前停止服务

.