Служба Runnable или Intent

Я прочитал несколько статей о фоновых процессах в Android. но у меня есть ситуация, когда фоновая операция займет более 30 секунд; пример:

  • Начать активность
  • нажмите на кнопку
  • создать исполняемый файл, вызвать сервер для получения некоторых данных
    30 секунд (пожалуйста, подождите сообщения)
  • готово, отправить сообщение обработчику
  • Ориентация экрана происходит в середине 30 секунд...

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

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

Как лучше всего обрабатывать ориентацию экрана между этими 30 секундами downloading/parsing/inserting и db (транзакция)? -> Я не хочу использовать метод onConfigurationChanged().

Каковы ваши решения для таких проблем?

Спасибо.


person User1980    schedule 26.05.2013    source источник


Ответы (3)



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

<activity
        android:label="@string/app_name"
        android:name=".Counter_demoActivity"
        android:configChanges="keyboardHidden|orientation|keyboard" >

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

person Ilya Gazman    schedule 26.05.2013
comment
Хм, вы имеете в виду, что статический класс работает в фоновом режиме? Разве это не похожее решение, как IntentService? - person User1980; 27.05.2013
comment
@Oggie Конечно, нет, IntentService - это Служба, поэтому у него есть жизненный цикл службы. не приложение. Можно сказать, что сервис ограничен жизненным циклом приложения, но это не всегда правильно. - person Ilya Gazman; 27.05.2013

JobScheduler (minSdkVersion=21+) — это надежная альтернатива работающая или намеренная служба. В него встроена логика повторных попыток, и он не страдает от фоновых ограничений на службы в Android O.

person g2server    schedule 21.10.2017