2016-06-18 4 views
0

Мне нужно остановить службу от себя, и я использую метод stopSelf, но служба не останавливается.stopself() не работает

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    int hour = MainActivity.sa3a; 
    int minute = MainActivity.dakika; 
    java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    Date date = new Date(); 
    System.out.println(dateFormat.format(date)); 
    int x = date.getHours(); 
    int y = date.getMinutes(); 
    String n = String.valueOf(x); 
    Toast.makeText(send.this,n, Toast.LENGTH_SHORT).show(); 
    if (hour == x && minute == y) { 
     Toast.makeText(send.this, "start", Toast.LENGTH_SHORT).show(); 
     send.this.stopSelf(); 
     Toast.makeText(send.this, "stop_Self_is_Not_work", Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(send.this, "yOKKKKKK", Toast.LENGTH_LONG).show(); 
    } 

    return START_STICKY; 
} 
+1

Что заставляет вас думать, что 'stopSelf' не работает? – Karakuri

+0

Потому что stop_Self_is_Not_work Toast показывает! если эта работа не работает, этот тост не показывает @ Karakuri –

+2

Это не то, как вы проверяете, остановлена ​​ли служба. Этот метод не остановится на строке 'send.this.stopSelf()', он завершит метод, то есть он покажет тост, даже если система его остановит. Найдите список запущенных сервисов в настройках телефона и посмотрите, указана ли ваша служба там. – Karakuri

ответ

1

Для того чтобы увидеть, что служба действительно останавливается, вам необходимо переопределить обратный вызов onDestroy(). Сделайте тост, который хотите показать в методе onDestroy, а затем, когда вы вызываете stopSelf(), должен показать ваш тост.

Если тост в вашем текущем состоянии не показан, значит условие не выполнено. Если вы только вызываете stopSelf из этого условия, служба не будет остановлена. Вам необходимо дополнительно проверить свои условия, чтобы гарантировать прекращение обслуживания по вашему желанию.

+0

@AbdAljbbarAmmar Вы даже пытались реализовать 'onDestroy()' как этот ответ предложил? –

-1

Вы должны убедиться, что вызывается служба, начинающаяся с метода startService() для onStartCommand(). Если вы используете bindService(), загрузите свою логику в метод onBind().

+0

Глядя на ваш код, я думаю, что это может быть логическая проблема. Условие «если (час == x && минута == y) « может не произойти. Попробуйте другое условие, чтобы закрыть службу. Нравится это: if (hour <= x && minute <= y) –

+0

Что вы подразумеваете под ~ "** для onStartCommand() называется **"? Как это не может быть вызвано. –

+0

Ниже вы найдете жизненный цикл службы. OnStarCommand можно назвать или нет, зависит от запуска https://developer.android.com/guide/components/services.html https://developer.android.com/images/service_lifecycle.png –

Смежные вопросы