Запуск нескольких сервисов - PullRequest
8 голосов
/ 07 апреля 2011

В настоящее время я встраиваю некоторые функции обнаружения движения в свое приложение.Я не нашел способа постоянно следить за акселерометром, не заставляя телефон все время спать.В попытке преодолеть это, у меня в настоящее время есть Служба, реализующая SensorEventListener.Я могу запускать эту службу через определенные промежутки времени (с помощью диспетчера аварийных сигналов), получать показания от акклерометра устройства, определять, перемещается ли устройство, и затем отключать службу.Обычно это выглядит следующим образом:

public class MyService extends Service implements SensorEventListener {

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
                /* Register this SensorEventListener with Android sensor service */
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        /* Unregister SensorEventListener */
        }

    /* SensorEventListener Implementation ************************/

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

    /* Receives callback when sensor values change */
    @Override
    public void onSensorChanged(SensorEvent event) {
        /* Determine if moving & then call stopSelf() to shut service down */
    }
}

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

Мне нужно знать, есть ли безопасный способ одновременного запуска более чем одной службы в одном приложении .Я рассмотрел использование IntentService вместо стандартного класса обслуживания.Я знаю, что они реализуют свой собственный рабочий поток для обработки вызовов.Проблема в том, что я понятия не имею, как я могу реализовать тип асинхронных обратных вызовов, требуемых SensorEventListener изнутри IntentService.Иными словами, у меня нет гарантии, что метод, подобный onSensorChanged, получит обратный вызов до того, как IntentService завершит свою работу и завершит работу.

Любые предложения по обходу этой проблемы приветствуются.

1 Ответ

8 голосов
/ 07 апреля 2011

как они могут конфликтовать.

Как?

Мне нужно знать, есть ли безопасный способ запустить более одной службы одновременно в одном приложении

Не существует внутренней проблемы, связанной с наличием более чем одной службы одновременно в одном и том же приложении, равно как и внутренней проблемой, связанной с наличием более чем одной активности в одном приложении.

Любые предложения по обходу этой проблемы очень приветствуются.

Вы не продемонстрировали проблему.

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