stopService不会停止我的服务....为什么?

Nul*_*ion 24 service android

我在我的Android APP上有一个后台服务,它正在获取我的GPS位置并将其发送到远程数据库.它工作得很好.

问题是当我想要停止服务......它不会停止:S.也没有出现logcat上的异常或错误......它根本不会停止.

这是启动我的srvice的代码(带按钮):

startService(new Intent(GPSLoc.this, MyService.class)); //enciendo el service
Run Code Online (Sandbox Code Playgroud)

这是我停止它的代码(在onactivityresult方法上):

stopService(new Intent(GPSLoc.this, MyService.class));
Run Code Online (Sandbox Code Playgroud)

我已经调试了应用程序,并且我检查了每次调试它时都调用了stopService代码行,但它没有停止......

我确信它没有停止导致我的数据库,当我按下按钮停止服务时,我仍然从模拟器中恢复gps位置.

我做得不好?

Joa*_*und 34

你实施了onDestroy()吗?如果没有,我相信这可能是解决方案 - 你停止你Timer或你用来运行服务的任何东西onDestroy().

可以通过调用stopSelf()方法或调用Context.stopService()来停止服务.

有关更多信息,请参阅此链接.

  • 我不明白为什么有必要实现onDestroy().它只是一个生命周期回调方法.你能澄清一下吗? (7认同)
  • 哦,我没有实施销毁!!!!!!在服务上,我使用一个带有处理程序的线程和一个简单的处理程序。¿如何阻止他们? (2认同)

Com*_*are 9

我确信它没有停止导致我的数据库,当我按下按钮停止服务时,我仍然从模拟器中恢复gps位置.

你可能没有取消注册你的LocationListener.


小智 5

我有同样的问题。我发现如果服务已经GoogleApiClient连接并且仍然获得位置更新,stopService()则完全没有影响,服务的industry()没有被调用。为了解决这个问题,我在服务代码中创建了一个停止位置服务的函数。调用stopLocationService()从活动,然后调用stopService。下面是代码示例:

public class myLocationService extends Service{
...

    public void stopLocationUpdates() {

        LocationService.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,this);       
        mGoogleApiClient.disconnect();

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

在活动中,

{
    ...
    if(mService != null && isBound) {

        mService.stopLocationUpdates();
        doUnbindService();
        stopService(new Intent(this,   myLocationService.class));

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