如何启动服务并在android中的另一个活动停止它

时间:2015-06-05 03:53:38

标签: android android-service tracking

  

我的服务永远不会停止,直到我卸载应用程序#HELP!

服务类

public class LocationService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    GPSTracker myGps = new GPSTracker(getApplicationContext());
    Log.e("tracking...","");
    return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public boolean stopService(Intent name) {
    GPSTracker myGps = new GPSTracker(getApplicationContext());
        Log.e("STOPPED!","");
    return super.stopService(myGps);
  }
}

**在登录活动中启动服务**

            Intent locationService = new Intent(Login.this, LocationService.class);
            startService(locationService);

**停止服务在员工活动选项菜单中选择**

     @Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent serviceIntent;
    int id = item.getItemId();
    if (id == R.id.LogOut) {
        serviceIntent = new Intent(Employee.this, LocationService.class);
        stopService(serviceIntent);
        Log.e("OUT"," ");
         finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

2 个答案:

答案 0 :(得分:0)

在你有的2个活动A和B中,你应该在B onStop()中取消绑定服务,然后你可以在A中调用stopService。只需输入stopService(serviceIntent);可能会给你和泄漏的​​服务连接错误

protected ServiceConnection mServerConn = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder binder) {
        Log.d(LOG_TAG, "onServiceConnected");
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.d(LOG_TAG, "onServiceDisconnected");
    }
}

public void start() {
    // mContext is defined upper in code, I think it is not necessary to explain what is it 
    mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE);
    mContext.startService(i);
}

public void stop() {
    mContext.stopService(new Intent(mContext, ServiceRemote.class));
    mContext.unbindService(mServerConn);
}

并在你的代码中看到你所做的是你已经停止了服务,但是我没有看到你取消绑定它,正确的程序将取消绑定然后停止它。

答案 1 :(得分:0)

不要使用命令startService(service)。

要在应用程序开头启动服务,只需将其绑定到您的所有活动即可。这样,当活动被销毁时,服务就会停止。 彻底解释HERE

此外,如果您希望服务在应用程序关闭(但未销毁)时结束,只需将unBindService方法添加到覆盖的onStop方法。