Выполняется несколько служб

В настоящее время я встраиваю в свое приложение некоторые функции обнаружения движения. Я не нашел способа постоянно контролировать акселерометр, не заставляя телефон постоянно спать. Пытаясь преодолеть это, у меня в настоящее время есть служба, реализующая 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 вместо стандартного класса Service. Я знаю, что они реализуют собственный рабочий поток для обработки вызовов. Проблема в том, что я понятия не имею, как я могу реализовать тип асинхронных обратных вызовов, требуемых SensorEventListener, из IntentService. Другими словами, у меня нет гарантии, что такой метод, как onSensorChanged, получит обратный вызов до того, как IntentService завершит свою работу и отключится.

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

8
задан user522210 13 April 2011 в 18:05
поделиться