Переменные в моей службе / 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 ответ:
Это, конечно, не имеет ничего общего с тем, что члены являются частными.
Я не уверен, в чем проблема, но я мог бы представить себе одного из этих кандидатов:
- служба завершается до поступления второго запроса.
Receiver
порождает новый процесс, потому что он отвечает "системному намерению".Вы можете оценить эту догадку, позволяя вашей службе периодически регистрировать что-то.