我的服务永远不会停止,直到我卸载应用程序#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);
}
答案 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方法。