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(); 
} 
+1

如果“服务没有停止”,则表示“传感器读数持续到达”,这是因为您没有在'onDestroy()'中注销您的监听器。 – CommonsWare

+0

是的,这就是我的意思。我应该如何取消注册监听者? –

如果“服务doen't停”,你的意思是“读数保持到达传感器”,那是因为你没有注销你的听众在onDestroy()。通过调用中的SensorManager调用unregisterListener(),传入听众(看起来像是this)。

+0

谢谢它的作品! –