Страница 1 из 1
вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 11:53
EspanaMia
Подскажите пожалуйста, пишу будильник, создал 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()) {} ", чтобы ждать пока окно станет активным, но не помогло.
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 12:09
Mikhail_dev
Может быть вы повернули свое устройство. В onPause отключайте MediaPlayer и всё встанет на свои места.
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 12:19
klblk
Не отвечу на вопрос, но всё же напишу пару своих:
1) что мешает вызывать сразу Activity через AlarmManager? (сам ни разу не использовал, но у PendingIntent есть метод getActivity)
2) почему бы не проигрывать музыку где-нибудь в сервисе? (опять же, у PendingIntent есть метод getService)
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 13:46
EspanaMia
m090050 писал(а):Может быть вы повернули свое устройство. В onPause отключайте MediaPlayer и всё встанет на свои места.
нет, тестирую на эмуляторе и в манифесте прописан портретный режим - android:screenOrientation="portrait".
Пробовал в onPause, но дело в том, что когда он вызывается MediaPlayer ещё не создан(отслеживаю по логам).
klblk писал(а):Не отвечу на вопрос, но всё же напишу пару своих:
1) что мешает вызывать сразу Activity через AlarmManager? (сам ни разу не использовал, но у PendingIntent есть метод getActivity)
2) почему бы не проигрывать музыку где-нибудь в сервисе? (опять же, у PendingIntent есть метод getService)
1. Попробовал, к сожалению проблема осталась.
2. Не хотел использовать сервис чтобы он висел в памяти, если другого решения не найду, то сделаю через него.
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 16:07
klblk
EspanaMia писал(а):1. Попробовал, к сожалению проблема осталась.
2. Не хотел использовать сервис чтобы он висел в памяти, если другого решения не найду, то сделаю через него.
1. Это было не решение проблемы, просто непонятно зачем вообще прослойка в виде ресивера.
2. Зачем висеть в памяти? Сервис стартует, выполняет нужное действие (проигрывание музыки) и останавливается. Не, может и через активити нормально, но моё "имхо" говорит, что сервис для данной задачи лучше.
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 19:44
Mikhail_dev
Не хотел использовать сервис чтобы он висел в памяти
1. А Активити не висит в памяти?
2. Они используют один и тот же процесс. Можно конечно сделать разные, но по дефолту один
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 20:20
EspanaMia
всем спасибо, сделал через сервис.
p.s. но "научный" интерес почему такой жизненный цикл всё-равно остался. В документации такой инфы не нашёл.
Re: вызов Activity (жизненный цикл)
Добавлено: 10 янв 2014, 20:42
Mikhail_dev
Не знаю, это надо разбираться. В андроиде много
таких подводных камней. Радуйтесь что жизненный цикл по очереди выполняется.