2017-04-24 8 views
1

이것은 백그라운드에서 실행중인 서비스를 중지하기 위해 실행중인 코드입니다. 중지 버튼을 누르면 서비스가 계속 실행됩니다. onDestroy 함수의 축배는 실행되지만 서비스는 중단되지 않습니다. 애니?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)); 
     } 
    }); 

} 

이것은 서비스중인 코드입니다. 당신이 onDestroy()에 리스너 등록을 취소하지 않았기 때문에

@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

"service doen't stop"은 "onDestroy()"에서 청취자를 등록 취소하지 않았기 때문에 "센서 판독 값이 계속 도착 함"을 의미합니다. – CommonsWare

+0

네, 그게 무슨 뜻인지. 청취자 등록을 어떻게 취소해야합니까? –

답변

1

는 "서비스가 정지 doen't"에 의해, 당신은 의미하는 경우 "판독이 도착 유지 센서", 즉. SensorManagerunregisterListener()onDestroy()에 전화하여 청취자를 거치면 (this 인 것처럼 보임)

+0

덕분에 작동합니다! –