Android stopService() 没有停止
Android stopService() not stopping
这是我的代码 运行 停止我在后台 运行 的服务。如果我按下停止按钮,服务只会保持 运行。来自 onDestroy 函数的 toast 运行但服务不会停止。有帮助吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnStart = (Button) findViewById(R.id.btnStart);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent(getBaseContext(), myServices.class));
//dialContactPhone("123123123");
}
});
Button btnstop = (Button) findViewById(R.id.btnStop);
btnstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(getBaseContext(), myServices.class));
}
});
}
这是服务中的代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
// success! we have an accelerometer
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
vibrateThreshold = accelerometer.getMaximumRange() / 2;
running = false;
} else {
// fai! we dont have an accelerometer!
}
//initialize vibration
return START_STICKY;
}
@Override
public void onDestroy(){
super.onDestroy();
Toast.makeText(this, "Servive stoped", Toast.LENGTH_LONG).show();
}
如果 "the service doen't stop",你的意思是 "the sensor readings keep arriving",那是因为你没有在 onDestroy()
中注销你的监听器。为此,请在 onDestroy()
中的 SensorManager
上调用 unregisterListener()
,传入您的侦听器(看起来像是 this
)。
这是我的代码 运行 停止我在后台 运行 的服务。如果我按下停止按钮,服务只会保持 运行。来自 onDestroy 函数的 toast 运行但服务不会停止。有帮助吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnStart = (Button) findViewById(R.id.btnStart);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(new Intent(getBaseContext(), myServices.class));
//dialContactPhone("123123123");
}
});
Button btnstop = (Button) findViewById(R.id.btnStop);
btnstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(new Intent(getBaseContext(), myServices.class));
}
});
}
这是服务中的代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
// success! we have an accelerometer
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
vibrateThreshold = accelerometer.getMaximumRange() / 2;
running = false;
} else {
// fai! we dont have an accelerometer!
}
//initialize vibration
return START_STICKY;
}
@Override
public void onDestroy(){
super.onDestroy();
Toast.makeText(this, "Servive stoped", Toast.LENGTH_LONG).show();
}
如果 "the service doen't stop",你的意思是 "the sensor readings keep arriving",那是因为你没有在 onDestroy()
中注销你的监听器。为此,请在 onDestroy()
中的 SensorManager
上调用 unregisterListener()
,传入您的侦听器(看起来像是 this
)。