Стоп сервис не работает на Android - PullRequest
3 голосов
/ 10 октября 2011

Я новичок в Android, и у меня есть приложение, которое использует фоновый сервис. Я хочу запустить / остановить сервис, нажав на кнопку, я делаю это так:

case R.id.enablepop:
        if (!(pop.runningFlag))
            startService(new Intent(mainScreen,PopUpService.class));
        return true;
case R.id.disablepop:
        if (pop.runningFlag)
                stopService(new Intent(mainScreen,PopUpService.class));
        return true;

В функции onStart () службы у меня есть runningFlag, для которой я установил значение "true", затем я создаю поток, который работает, пока для runningFlag установлено значение true. Я установил для runningFlag значение false в onDestroy ().

Проблема в том, что служба не останавливается. Может кто-нибудь помочь мне, плз?

1 Ответ

2 голосов
/ 10 октября 2011

Попробуйте использовать Handler, как здесь, вы можете использовать Handler как Thread.

вот пример

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;

public class MyService extends Service{
    private Handler handler;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        handler = new Handler();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        handler.post(updateStatus);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(updateStatus);
        handler = null;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        handler.removeCallbacks(updateStatus);
        handler = null;
        return super.onUnbind(intent);
    }

    private Runnable updateStatus = new Runnable() {
        @Override
        public void run() {
            // do something here
            handler.postDelayed(updateStatus, 1000);
        }
    };
}

здесь обработчик может быть инициализирован в метод oncreate теперь после этого, когдаПосле вызова метода onStart объект updateStatus будет вызываться через handler.post (), который запустит метод run этого объекта Runnable.

Теперь в этом случае он сразу вызовет run () и выполнит инструкциютолько для повторения этого вызова задачи внутри этого метода в определенное время задержки, например, здесь 1000 миллисекунд, поэтому после завершения всего выполнения он будет снова вызываться через 1 секунду, и повторение этой задачи будет продолжаться до тех пор, пока вы не сможете удалить работающий объект из обработчикатак что в основном это был вызов в onDestroy ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...