2017-04-24 177 views
1

這是我正在運行的代碼來停止在後臺運行的服務。如果我按下停止按鈕,服務只會繼續運行。來自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

是的,這就是我的意思。我應該如何取消註冊監聽者? –

回答

1

如果「服務doen't停」,你的意思是「讀數保持到達傳感器」,那是因爲你沒有註銷你的聽衆在onDestroy()。通過調用中的SensorManager調用unregisterListener(),傳入聽衆(看起來像是this)。

+0

謝謝它的作品! –