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