вызов Activity (жизненный цикл)

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
EspanaMia
Сообщения: 24
Зарегистрирован: 10 янв 2014, 11:03

вызов Activity (жизненный цикл)

Сообщение EspanaMia » 10 янв 2014, 11:53

Подскажите пожалуйста, пишу будильник, создал alarmManager, который в назначенное время вызывает BroadCastReceiver и тот вызывает Activity, в котором проигрывается музыка через mediaPlayer.

Проблема в том, что если Activity вызывается когда телефон спит, то его жизненный цикл становится таким:
1. onCreate
2. onStart
3. onResume - создаётся mediaPlayer
4. onPause
5. onStop
6. onRestart
7. onStart
8. onResume - только тут останавливается для действий пользователя

Есть ли способ это изменить и останавливать на пункте 3 ? Получается что mediaPlayer вызывается дважды(что приводит к ошибке). Если поместить его в onCreate, то он не всегда проигрывает мелодию, т.к. он работает только когда приложение активно, т.е. в onResume.
Пробовал вызывать mediaPlayer через AsyncTask(в котором добавлен цикл " while (!window.isActive()) {} ", чтобы ждать пока окно станет активным, но не помогло.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: вызов Activity (жизненный цикл)

Сообщение Mikhail_dev » 10 янв 2014, 12:09

Может быть вы повернули свое устройство. В onPause отключайте MediaPlayer и всё встанет на свои места.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: вызов Activity (жизненный цикл)

Сообщение klblk » 10 янв 2014, 12:19

Не отвечу на вопрос, но всё же напишу пару своих:
1) что мешает вызывать сразу Activity через AlarmManager? (сам ни разу не использовал, но у PendingIntent есть метод getActivity)
2) почему бы не проигрывать музыку где-нибудь в сервисе? (опять же, у PendingIntent есть метод getService)

EspanaMia
Сообщения: 24
Зарегистрирован: 10 янв 2014, 11:03

Re: вызов Activity (жизненный цикл)

Сообщение EspanaMia » 10 янв 2014, 13:46

m090050 писал(а):Может быть вы повернули свое устройство. В onPause отключайте MediaPlayer и всё встанет на свои места.
нет, тестирую на эмуляторе и в манифесте прописан портретный режим - android:screenOrientation="portrait".
Пробовал в onPause, но дело в том, что когда он вызывается MediaPlayer ещё не создан(отслеживаю по логам).
klblk писал(а):Не отвечу на вопрос, но всё же напишу пару своих:
1) что мешает вызывать сразу Activity через AlarmManager? (сам ни разу не использовал, но у PendingIntent есть метод getActivity)
2) почему бы не проигрывать музыку где-нибудь в сервисе? (опять же, у PendingIntent есть метод getService)
1. Попробовал, к сожалению проблема осталась.
2. Не хотел использовать сервис чтобы он висел в памяти, если другого решения не найду, то сделаю через него.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: вызов Activity (жизненный цикл)

Сообщение klblk » 10 янв 2014, 16:07

EspanaMia писал(а):1. Попробовал, к сожалению проблема осталась.
2. Не хотел использовать сервис чтобы он висел в памяти, если другого решения не найду, то сделаю через него.
1. Это было не решение проблемы, просто непонятно зачем вообще прослойка в виде ресивера.
2. Зачем висеть в памяти? Сервис стартует, выполняет нужное действие (проигрывание музыки) и останавливается. Не, может и через активити нормально, но моё "имхо" говорит, что сервис для данной задачи лучше.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: вызов Activity (жизненный цикл)

Сообщение Mikhail_dev » 10 янв 2014, 19:44

Не хотел использовать сервис чтобы он висел в памяти
1. А Активити не висит в памяти?
2. Они используют один и тот же процесс. Можно конечно сделать разные, но по дефолту один

EspanaMia
Сообщения: 24
Зарегистрирован: 10 янв 2014, 11:03

Re: вызов Activity (жизненный цикл)

Сообщение EspanaMia » 10 янв 2014, 20:20

всем спасибо, сделал через сервис.

p.s. но "научный" интерес почему такой жизненный цикл всё-равно остался. В документации такой инфы не нашёл.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: вызов Activity (жизненный цикл)

Сообщение Mikhail_dev » 10 янв 2014, 20:42

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

Ответить