Android停止服务()不停止
问题描述:
这是我正在运行的代码来停止在后台运行的服务。如果我按下停止按钮,服务只会继续运行。来自onDestroy函数的Toast会运行,但服务不会停止。安妮帮忙吗?Android停止服务()不停止
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();
}
答
如果“服务doen't停”,你的意思是“读数保持到达传感器”,那是因为你没有注销你的听众在onDestroy()
。通过调用中的SensorManager
调用unregisterListener()
,传入听众(看起来像是this
)。
+0
谢谢它的作品! –
如果“服务没有停止”,则表示“传感器读数持续到达”,这是因为您没有在'onDestroy()'中注销您的监听器。 – CommonsWare
是的,这就是我的意思。我应该如何取消注册监听者? –