Переменные в моей службе / IntentService сбрасываются при каждом запуске


Я объявил службу, которая будет действовать как очередь. Поэтому у меня есть переменная, которая сообщает службе, что это первый запуск, и еще одна, которая хранит значение.

Код выглядит так:

public class TTSQueue extends Service {

private Integer lastvol = 0;
private Boolean isFirstStart = true;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Bundle b = intent.getExtras();
    Integer vol = b.getInt(TTS.PARAM_LAST_VOL, 0);
    if (vol > lastvol) {
        lastvol = vol;
    }
    if (isFirstStart) {
        isFirstStart = false;
        startAnotherService();
    } else {
        waitForAnEventAndThen_startAnotherService();
    }

}
Хорошо, Проблема в том, что эта служба запускается с приемника. И каждый раз, когда он запускается, оба lastvol и isFirstStart сбрасываются. Я подумал, что если сервис уже создан и затем запущен с намерением, он будет только вызывать onStartCommand() снова и не сбрасывать все.

Я также пробовал только объявлять переменные и устанавливать их значение по умолчанию в onCreate(), но это имело тот же эффект. Также я попытался заменить Service на IntentService, но это тоже не помогает, та же проблема.

Я хотел бы избежать использования SharedPreferences, так как я не думаю, что это обязательно нужно в этом случае. (И я не хочу тратить циклы записи пользователя).

Я что-то упустил? Я думаю, это не из-за декларации private, не так ли?

1 3

1 ответ:

Это, конечно, не имеет ничего общего с тем, что члены являются частными.

Я не уверен, в чем проблема, но я мог бы представить себе одного из этих кандидатов:
  • служба завершается до поступления второго запроса.
  • Receiver порождает новый процесс, потому что он отвечает "системному намерению".

Вы можете оценить эту догадку, позволяя вашей службе периодически регистрировать что-то.