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

标签 android service

我目前有一个服务,当我启动它时运行良好,但是当我尝试使用 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()

所以,这里有几种可能性:

  1. 您仍然有绑定(bind)的客户端(例如,其他 Activity ),在这种情况下,您无法停止服务,直到它们解除绑定(bind)
  2. 由于 unbindService()stopService() 都是异步的,因此时间可能会出现问题,在这种情况下,如果您调用 stopService() 来自您的 ServiceConnectiononServiceDisconnected() 方法

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

关于android - 调用 stopService 方法时服务不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176375/

相关文章:

java - 服务在 android 8 (oreo) 下意外停止

android - 当我在服务和 handler.post 方法中运行东西时,为什么我的 Activity 仍然滞后?

c# - Win32_Printer 方法是否在服务器上对本地计算机有效?

android - ListView 中的 Firebase 列表子项

android - 使用 Twitter Fabric 的自定义登录按钮?

java - 如何将监听器附加到单选按钮

c# - 如何减少 WCF soap 消息大小以节省带宽?

java - ArrayList Java字符串删除不删除

java - 如何在android中创建一个循环临时 Action 的线程

service - 如何检查 IONIC FRAMEWORK 中的 GPS 服务是否启用