2010-04-20 4 views
0

У меня есть приемник SMS-вещания в моем приложении со статическим логическим значением, чтобы сделать приемник активным или нет.Проблема жизненного цикла Android

public class SmsListener extends BroadcastReceiver { 

     public static boolean activated = false; 


     @Override 
     public void onReceive(Context context, Intent intent) 
      if (activated){ //do something 
       } 
     ... 
     } 
} 

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

Благодаря

Тобия Loschiavo

ответ

0

Единственный надежный способ я нашел, чтобы иметь глобалам, чтобы положить их в службу. Способ Android - использовать onSaveInstanceState, а затем восстановить состояние во всех различных методах, которые могут или не могут быть вызваны с этим состоянием. Даже это не является полностью надежным, поэтому вы можете также записывать состояние в предпочтения, когда в onPause и читать их в onResume.

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

+0

У меня есть активация в настройках ... кажется, работает – Matroska

+0

Я также установил Alarm с AlarmManager. Если приложение убито, сохраняется ли тревога? Из документации кажется да. – Matroska

+0

Почти все переживет активность. Они должны быть спроектированы так, чтобы постоянно мерцать в процессе существования. – drawnonward

Смежные вопросы