2017-04-24 10 views
1

これはバックグラウンドで実行されているサービスを停止するために実行しているコードです。私が停止ボタンを押すと、サービスはちょうど実行し続けます。 onDestroy関数のトーストは実行されますが、サービスは停止しません。 Annyヘルプ?Android stopService()が停止しない

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

"the service doen't stop"とは、あなたが 'onDestroy()'でリスナーの登録を解除しなかったためです。 – CommonsWare

+0

はい、それは私の意味です。リスナーの登録を解除するにはどうすればよいですか? –

答えて

1

「サービスが停止doen't」によって場合、あなたはonDestroy()であなたのリスナーの登録を解除していなかったので、つまり、「センサーの読み取り値が到着し続ける」を意味します。 SensorManagerunregisterListener()onDestroy()に呼び出し、リスナーに入れます(これはthisのように見えます)。

+0

ありがとうございます! –

関連する問題